同一问题的不同实现方法比较与总结

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);

 

以上是关于同一问题的不同实现方法比较与总结的主要内容,如果未能解决你的问题,请参考以下文章

BootStrap有用代码片段(持续总结)

提问回顾与个人总结

实时阴影渲染:软阴影

《程序设计与数据结构》第八周学习总结

《路由协议与交换技术》重点知识总结(路由交换知识点)

《路由协议与交换技术》重点知识总结(路由交换知识点)