1. 程式人生 > >同一問題的不同實現方法比較與總結

同一問題的不同實現方法比較與總結

數列 abcd second 需要 方法 二進制位 進制 個數 99乘法表

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

同一問題的不同實現方法比較與總結