同一问题的不同实现方法比较与总结
Posted haixiaer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一问题的不同实现方法比较与总结相关的知识,希望对你有一定的参考价值。
1、编程找出四位整数abcd中满足下述关系的数:(ab+cd)(ab+cd)=abcd
方案一:
1 for(int ab = 10;ab < 99;ab ++){2 for(int cd = 0;cd < 99;cd ++){3 if((ab + cd)*(ab + cd) == (ab*100+cd)){4 System.out.println(ab*100+cd);5 }6 }7 }
方案二:
1 for(int =1000; i < 10000 ; i ++){2 int ab = i / 100;3 int cd = i % 100;4 if((ab + cd) * (ab + cd) = i ){5 System.out.println(i); 6 } 7 }
2、输出99乘法表
方案一:两个循环实现
1 for(int i = 1;i < 10; i ++){ 2 for(int j =1;j <= i;j ++){ 3 System.out.print(i + "*" + j + "=" + i*j +" "); 4 } 5 System.out.println(); 6 }
方案二:一个循环实现
1 for(int i=1,j=1;i<10;j++){ 2 System.out.print(j + "*" + i + "=" + i*j + " "); 3 if(j == i){ 4 System.out.println(); 5 i++; 6 j=0; 7 } 8 }
3、求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3+b3+c3 = abc,则abc就是水仙花数
方案一:
1 for(int a = 1;a<10;a ++){ 2 for(int b = 0;b < 10;b ++){ 3 for(int c = 0;c < 10;c ++){ 4 if(a*a*a + b*b*b + c*c*c == 100*a + 10*b + c){ 5 System.out.println(100*a + 10*b + c); 6 } 7 } 8 } 9 }
方案二:
1 for(int i = 100; i < 1000; i++){ 2 int c = i % 10; 3 int b = i / 10 % 10; 4 int a = i / 100; 5 if(a * a * a + b * b * b + c * c * c == i){ 6 System.out.println(i); 7 } 8 }
4、计算圆周率:中国古代数学家研究出了计算圆周率最简单的方法:PI = 4/1-4/3+4/5-4/7……这个算式的结果会无限趋近于圆周率的值,我国古代数学家祖冲之计算出,圆周率在3.1415826和3.1415927之间,请编程计算,要想得到这样的结果他要经过多少次加减运算。
方案一:将一次减法运算看做一次运算,这样就都是加法运算
1 int count = 0; 2 double pi = 0.0; 3 double i=4.0,j=1.0,k=3.0; 4 while(!(pi>3.1415926&pi<3.1415927)){ 5 pi += i/j - i/k; 6 j += 4; 7 k += 4; 8 count += 2; 9 } 10 System.out.println(count-1);
方案二:
1 // 记录圆周率 2 double PI = 0; 3 // 记录次数 4 int count = 0; 5 // 记录分母 6 double base = 1; 7 // 控制符号 8 int sym = 1; 9 while(PI > 3.1415927 || PI < 3.1415926){ 10 PI += (sym * 4.0 / base); 11 // 改变符号 12 sym *= -1; 13 // 分母变化 14 base += 2; 15 // 记录次数 16 count++; 17 } 18 System.out.println(count); 19 }
5、已知:斐波那契数列的前几个数为0,1,1,2,3,5……从 第三项开始,每一项都等于前两项之和,。读入一个整数n,编程求出次数列的前n项
方案一:
1 int[] arr=new int[num]; 2 arr[0]=1; 3 arr[1]=1; 4 for(int i = 2;i < num;i ++){ 5 arr[i] = arr[i-1] + arr[i-2]; 6 } 7 String str = Arrays.toString(arr); 8 System.out.println(str);
方案二:
1 if(n <= 1){ 2 System.out.println(0); 3 } else if(n == 2){ 4 System.out.println("0, 1"); 5 } else { 6 System.out.print("0, 1"); 7 // 定义变量记录第一项 8 int first = 0; 9 // 定义变量记录第二项 10 int second = 1; 11 for(int i = 3; i <= n; i++){ 12 // 计算第三项 13 int third = first + second; 14 System.out.print(", " + third); 15 // 原来的第二项看作新的第一项 16 first = second; 17 // 原来的第三项看作新的第二项 18 second = third; 19 } 20 } 21 }
6、一个int类型的整数由32个二进制组成,每个二进制位的值要么是0要么是1。要求读入一个int类型的整数n,计算他的32个二进制位中总共有多少位为1。
1 int count = 0; 2 for(int i = 0; i < 32; i++){ 3 // 判断最后一位是否为1 4 if((n & 1) == 1){ 5 count++; 6 } 7 // 这一位记录完成之后需要舍弃 8 n >>= 1; 9 } 10 System.out.println(count);
以上是关于同一问题的不同实现方法比较与总结的主要内容,如果未能解决你的问题,请参考以下文章