java程式設計題50道(1)
阿新 • • 發佈:2021-07-11
程式1
題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子對數為多少?
題目思路:
先推出幾個月內兔子數量 1 1 2 3 5 8 13.。。。
可推出規律為 n = n-1+n-2
定義函式累計兔子數量,再通過主函式輸出
package test; import java.util.Scanner; public class hello { public static int rabbit(int i) { if(i==1||i==2) {//兔子數量在前兩個月沒有變化 return1; } else { return rabbit(i-1)+rabbit(i-2);//根據變化可知三個月後均為前兩月相加 } } public static void main(String[] args) { Scanner in =new Scanner(System.in); int i =in.nextInt(); int a; a=rabbit(i); System.out.print("輸出月份求該月兔子數量h"); System.out.print(i+"月共有"+a+"對兔子"); } }
程式2
題目:判斷101-200之間有多少個素數,並輸出所有素數。
題目思路:
以主函式確定範圍並輸出,再建構函式進行素數判斷,
1 package test; 2 3 import java.util.Scanner; 4 5 public class hello { 6 public static boolean judge_prime(int x) {//先定義判斷素數函式,注意定義函式返回型別! 7 for (int i=2;i<x;i++) {//判斷函式方法可以任意改變 8 if(x%i==0) { 9 return false; 10 } 11 } 12return true; 13 } 14 public static void main(String[] args) { 15 Scanner in =new Scanner(System.in); 16 System.out.println("請輸入數字給出素數範圍");//主函式中定義素數範圍,通過運用函式進行判斷 17 int a =in.nextInt(); 18 int b =in.nextInt(); 19 for (int i=a;i<=b;i++) { 20 if(judge_prime(i)) { 21 System.out.print(i+" ");//println則為隔行輸出 22 } 23 } 24 } 25 26 }
程式3
題目:打印出所有的”水仙花數”,所謂”水仙花數”是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個”水仙花數”,因為153=1的三次方+5的三次方+3的三次方。
題目思路:
與素數篩選相同,以主函式選擇數字,通過建構函式判斷,最後主函式輸出
要注意通過整除取餘來獲得各個位數
1 package test; 2 3 import java.util.Scanner; 4 5 public class hello { 6 public static boolean daffodil(int i) { 7 int x=i/100;//通過求整取餘獲得各個位數上的數字 8 int y=(i/10)%10; 9 int z=i%10; 10 if (Math.pow(x, 3)+Math.pow(y, 3)+Math.pow(z, 3)==i) { 11 return true;//以此來判斷水仙花數並返回主函式輸出 12 } 13 return false; 14 } 15 public static void main(String[] args) { 16 Scanner in =new Scanner(System.in); 17 int sum=0; 18 for(int i=100;i<=999;i++)//通過for迴圈獲得三位數 19 { 20 if(daffodil(i)) { 21 System.out.print(i+" "); 22 sum++;//統計個數 23 } 24 } 25 System.out.print("共有"+sum+"個水仙花數"); 26 } 27 28 }
程式4
題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
題目思路:
先找到最低質數,不能相除時尋找下一個質數,當質數與正整數相同時已經除盡便直接輸出
1 package test; 2 3 import java.util.Scanner; 4 5 public class hello { 6 7 public static void main(String[] args) { 8 System.out.print("輸入分解數:"); 9 Scanner in =new Scanner(System.in); 10 int x =in.nextInt(); 11 System.out.print(x+"="); 12 for (int i=2;i<=x;i++ ) 13 { 14 while(x%i==0 && x!=i)//若使用for進行一次便會退出 15 { 16 x=x/i; 17 System.out.print(i+"*");//找到質因數輸出 18 } 19 if (x==i) {//當不能再分解時便將他輸出 20 System.out.print(i); 21 22 } 23 } 24 } 25 26 }
程式5
題目:利用條件運算子的巢狀來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。
題目思路:
瞭解條件運算子的巢狀
例如:
1、max=(a>b)?a:b
就是將a和b二者中較大的一個賦給max。
2、min=(a<b)?a:b
就是將a和b二者中較小的一個賦給min。
1 package test; 2 3 import java.util.Scanner; 4 5 public class hello { 6 7 public static void main(String[] args) { 8 System.out.print("輸入分數:"); 9 Scanner in =new Scanner(System.in); 10 int x =in.nextInt(); 11 String score=(x>90)?"A":(x>=60)?"b":"c";//判斷成績歸類,因abc為字元,所以使用string 12 System.out.print("分數為"+score+"類"); 13 } 14 15 }