同一問題的不同實現方法比較與總結
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);
同一問題的不同實現方法比較與總結