南邮ACM 1014 数据的插入与删除 JAVA解法
来源:互联网 发布:淘宝精选安踏鞋 编辑:程序博客网 时间:2024/05/22 12:46
数据的插入与删除
时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte
总提交:1286 测试通过:251
所以我就按照他的算法,使用java语言重写了一次。
还是报“Memory Limit Exceed”,不知道这是为什么???
总提交:1286 测试通过:251
描述
在一组数据(数目不超过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;}
所以我就按照他的算法,使用java语言重写了一次。
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]);}}}
还是报“Memory Limit Exceed”,不知道这是为什么???
大家有时知道的可以告诉我。
0 0
- 南邮ACM 1014 数据的插入与删除 JAVA解法
- ACM 数据的插入与删除
- 1014数据的插入与删除
- 南邮NOJ 1014 数据的插入与删除
- 南邮 OJ 1014 数据的插入与删除
- 南邮OJ 1014 数据的插入与删除
- 刷题第七天:南邮NOJ【1014数据的插入与删除】
- 数据的插入与删除
- 数据的插入与删除
- 南邮acm 1009 2的N次方 java解法
- 南邮ACM 1010 数的计算 JAVA解法
- 插入更新与删除数据
- 插入、更新与删除数据
- 南邮ACM 1007 完美立方 JAVA解法
- 南邮ACM 1011 大数加法 JAVA解法
- 南邮ACM 1013 三角形判断 JAVA解法
- mysql运算符与数据的插入,更新,删除
- MySQL 入门 之 数据的插入、查询、更新与删除
- typecheck
- 最大最小值以及前驱后继操作最坏情况都为O(1)的顺序统计树
- 反向迭代器(rbegin,rend)
- codeforces 444C DZY Loves Colors 线段树乱搞
- 软件测试系列之黑白盒(三)
- 南邮ACM 1014 数据的插入与删除 JAVA解法
- poj Tiling
- 技术晋升的误区
- 实战Jquery(一)--用户名校验
- POJ 3013 Big Christmas Tree(Dijkstra)
- c/cpp中如何分割字符串,类似于split的功能
- [LeetCode] N-Queens II
- /*****************c++ STL 里的upper_bound 和 lower_bound 的用法~~*********************/
- 内核中位运算函数