描述
在一组数据(数目不超过10000)中,插入新数,删除所有与给定数相等的数据。
输入
第一行是未排序的一组非负整数,数目不超过10000。以-1作为结束标志。
第二行是要插入的数。
第三行是要删除的数。
输出
第一行输出自小到大排好序的数。如果没有元素,输出“No elements.”(不包括引号)。
第二行输出插入后自小到大排好序的数,以“,”隔开。
第三行输出删除后自小到大排好序的数,以“,”隔开。如果没有元素,输出“No elements.”(不包括引号)。
样例输入
100 98 79 63 44 99 -1
88
79
样例输出
44,63,79,98,99,100
44,63,79,88,98,99,100
44,63,88,98,99,100
提示
题目来源
GUOJ
这道题其实不是很难,但是我最后用java做还是没有完成。总是报“这段代码专门报Memory Limit Exceed”错误。以下是我写的代码。
package yx.njuptacm; import java.util.Arrays; import java.util.Scanner; public class ACM1014 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[] arr=new int[10001]; int n=0; while(true){ int a=sc.nextInt(); if(a==-1){ break; } arr[n++]=a; } int insertNum=sc.nextInt(); int deleteNum=sc.nextInt(); sort(arr,n); insert(arr,n,insertNum); delete(arr,n+1,deleteNum); } private static void delete(int[] arr, int n,int deleteNum) { /*int index=-1; for(int i=0;i<n;i++){ if(arr[i]==deleteNum){ index=i; } } if(index!=-1){//有可以删除的元素 if(n==1){ System.out.println("No elements."); return; } for(int i=index;i<n;i++){ arr[i]=arr[i+1]; } n--; }*/ for(int i=0;i<n;i++){ if(deleteNum<=arr[i]){ arr[i]=arr[i+1]; } } n--; for(int i=0;i<n-1;i++){ System.out.print(arr[i]+","); } System.out.println(arr[n-1]); } private static void insert(int[] arr, int n,int insertNum) { //int index=0;//用来记录应该插入的位置 /*for(int i=0;i<n;i++){ if(insertNum<arr[i]){ index=i; break; } }*/ for(int i=n-1;i>=0;i--){ if(insertNum<arr[i]){ arr[i+1]=arr[i]; }else{ arr[i+1]=insertNum; break; } } //arr[index]=insertNum; n++; for(int i=0;i<n-1;i++){ System.out.print(arr[i]+","); } System.out.println(arr[n-1]); } private static void sort(int[] arr,int n) { if(n==0){ System.out.println("No elements."); return; } //Arrays.sort(arr,0,n); int temp,j; for(int i=1;i<n;i++){//这里使用了插入排序 temp=arr[i]; j=i-1; while(j>=0&&temp<arr[j]){ arr[j+1]=arr[j]; j--; } arr[j+1]=temp; } for(int i=0;i<n-1;i++){ System.out.print(arr[i]+","); } System.out.println(arr[n-1]); } }
后来在http://www.cnblogs.com/Rosanna/p/3436508.html 这段C++代码通过运行
#include<iostream> using namespace std; int main() { int m=0,i,j,jia,jian,temp,str[10001]; while(cin>>str[m]&&str[m]!=-1) {m++;} cin>>jia>>jian; str[m]=jia; for(j=m-2;j>=0;j--) { for(i=0;i<=j;i++) { if(str[i]>str[i+1]) { temp=str[i]; str[i]=str[i+1]; str[i+1]=temp; } } } if(m==0) cout<<"No elements."<<endl; else{ for(i=0;i<=m-2;i++) { cout<<str[i]<<','; } cout<<str[m-1]<<endl; } for(j=m-1;j>=0;j--) { for(i=0;i<=j;i++) { if(str[i]>str[i+1]) { temp=str[i]; str[i]=str[i+1]; str[i+1]=temp; } } } for(i=0;i<=m-1;i++) { cout<<str[i]<<','; } cout<<str[m]<<endl; for(i=0;i<=m;i++) { if(str[i]==jian) { for(j=i;j<=m-1;j++) { str[j]=str[j+1]; } m=m-1; i=i-1; } } if(m==-1) { cout<<"No elements."<<endl; } else if(m==0) { cout<<str[m]<<endl; } else{ for(i=0;i<=m-1;i++) { cout<<str[i]<<','; } cout<<str[m]<<endl;} return 0; }
package yx.njuptacm; import java.util.Scanner; public class ACM1014FormNet { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int m=0,i,j,jia,jian,temp; int[] arr=new int[10001]; while(sc.hasNextInt()){ int a=sc.nextInt(); if(a==-1){ break; } arr[m++]=a; } jia=sc.nextInt(); jian=sc.nextInt(); arr[m]=jia; for(j=m-2;j>=0;j--){//冒泡排序 for(i=0;i<=j;i++){ if(arr[i]>arr[i+1]){ temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } if(m==0) System.out.println("No elements."); else{ for(i=0;i<=m-2;i++){ System.out.print(arr[i]+","); } System.out.println(arr[m-1]); } for(j=m-1;j>=0;j--){//插入一值后的冒泡排序 for(i=0;i<=j;i++){ if(arr[i]>arr[i+1]){ temp=arr[i]; arr[i]=arr[i+1]; arr[i+1]=temp; } } } for(i=0;i<=m-1;i++){ System.out.print(arr[i]+","); } System.out.println(arr[m]); for(i=0;i<=m;i++){ if(arr[i]==jian){//删除一个数 for(j=i;j<=m-1;j++){ arr[j]=arr[j+1]; } m--; } } if(m==-1){ System.out.println("No elements."); }else if(m==0){ System.out.println(arr[m]); }else{ for(i=0;i<=m-1;i++){ System.out.print(arr[i]+","); } System.out.println(arr[m]); } } }
大家有时知道的可以告诉我。