本文主要是介绍奇偶数分离(水题)---引发String和数组的比较,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=11
奇偶数分离
- 描述
- 有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。
- 输入
- 第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。 输出 - 第一行输出所有的奇数
第二行输出所有的偶数
样例输入 -
2 10 14
样例输出 -
1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 11 13 2 4 6 8 10 12 14
-
- 第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
这道题的第一个想法是:太简单了,直接一个for循环,然后判断奇数和偶数,然后存储再输出来。第二个考虑的是用什么存储呢?
此时第一个想法是用String str="",直接 str+=i; 然后就完事了。但是想起一次蓝桥杯的比赛,我正式用String来处理本身是数字的情况,结果好久都没有出来。连续做了几道题,到回来看的时候,还是没有出现,再加上String的存储也是有范围的,一直都没有留意,一直觉得简单就完事了,当时还抛出异常。
String的最大长度:http://www.blogjava.net/killme2008/archive/2009/01/15/251368.html
就这道题,用String和数组实现,发现两个耗时和内存占用方面,是两个不同的级别。看来想要简单,还是要付出代价的。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();while(n-->0){int length=sc.nextInt();new Main().intSort(length);}}/*** 耗时+内存:874 4306*/public void strSort(int length){String strA="",strB="";for(int i=1;i<=length;i++){if(i%2==0)strB+=i+" ";elsestrA+=i+" ";}System.out.print(strA+"\n"+strB+"\n");}/*** 耗时+内存:127 1822*/public void intSort(int length){int[] odd=new int[length/2+1]; //都加上1,这样无论是奇数还是偶数都保险,不会溢出int[] even=new int[length/2+1];int oddTmp=0,evenTmp=0;for(int i=0;i<=length;i++){if(i%2==0)even[evenTmp++]=i;elseodd[oddTmp++]=i;}for(int x:odd)if(x!=0)System.out.print(x+" ");System.out.println();for(int y:even)if(y!=0)System.out.print(y+" ");System.out.println();}
}
很明显
耗时+内存:874 4306 一个:耗时+内存:127
1822 差得太远了。
这篇关于奇偶数分离(水题)---引发String和数组的比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!