java程式設計題50道(2)
阿新 • • 發佈:2021-07-12
程式6
題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。
題目思路:先建構函式,主函式運用再輸出
通過輾轉相除法解決最大公約數,再利用公式法兩數相乘除以最大公約數求得最大公倍數
1 package test; 2 3 import java.util.Scanner; 4 5 public class hello { 6 public static int big_number(int a, int b) {//使用輾轉相除法,除數被除數餘數互相替換 7 int c; 8 if (a%b!=0) { 9 while(a%b!=0) { 10 c=a%b; 11 a=b; 12 b=c; 13 } 14 } 15 return b; 16 } 17 public static int min_number(int x,int y) { 18 int c; 19 c=(x*y)/big_number(x, y);//最小公倍數為兩數相乘除最大公約數 20 return c; 21 } 22 publicstatic void main(String[] args) { 23 System.out.print("輸入數字:");// 24 Scanner in =new Scanner(System.in); 25 int x =in.nextInt(); 26 int y =in.nextInt(); 27 System.out.print("最大公約數為"+big_number(x, y)+"最小公倍數為"+min_number(x, y));//建構函式後,用主函式輸出 28 } 29 30 }
程式7
題目:輸入一行字元,分別統計出其英文字母、空格、數字和其它字元的個數。
題目思路:
先用scanner獲取字串,再將字串賦值陣列,陣列從中逐個取出,進行統計
1 package test; 2 3 import java.util.Scanner; 4 public class hello { 5 public static void main(String[] args) { 6 System.out.print("輸入:字元"); 7 Scanner in = new Scanner(System.in); 8 String a =in.nextLine();//獲取字串 9 char[]zifuchuan=a.toCharArray();//將字串賦值陣列 10 int x=0;//統計空格 字母 數字 其他字元個數 11 int y=0; 12 int z=0; 13 int c=0; 14 for (int i = 0; i < zifuchuan.length; i++) { 15 if(zifuchuan[i] ==32) { 16 x++; 17 } 18 else if (zifuchuan[i]<=57&&zifuchuan[i]>=48) { 19 y++; 20 } 21 else if (zifuchuan[i]>=65&&zifuchuan[i]<=90||zifuchuan[i]>=97&&zifuchuan[i]<=122) { 22 z++; 23 } 24 else { 25 c++; 26 } 27 } 28 System.out.print("空格為"+x+" 數字為"+y+" 字母為"+z+" 其他字元為"+c); 29 } 30 31 }
程式8
題目:求s=a+aa+aaa+aaaa+aa…a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
題目思路:
通過迴圈,將輸入的值每次乘以十後再加上初始值並輸出,並累計數值
1 package test; 2 3 import java.util.Scanner; 4 public class hello { 5 public static void main(String[] args) { 6 System.out.print("輸入:"); 7 Scanner in = new Scanner(System.in); 8 int a = in.nextInt();//獲取數字及次數 9 int b = in.nextInt(); 10 int c=a;//設計累加和初始值 11 int sum=a; 12 System.out.print(a); 13 for (int i = 1; i <b; i++) { 14 a=a*10+c; 15 sum=sum+a; 16 System.out.print("+"+a);//輸出每次的值 17 } 18 System.out.print("="+sum);//輸出累加值 19 } 20 21 }
程式9
題目:一個數如果恰好等於它的因子之和,這個數就稱為”完數”。例如6=1+2+3.程式設計找出1000以內的所有完數。
題目思路:
先通過函式判斷完數,若是完數,因數相加之和等於完數。最後再以主函式以建構函式逐個確定,再輸出
1 package test; 2 3 import java.util.Scanner; 4 public class hello { 5 public static boolean wanshu(int a) {//函式判斷是否是完數 6 int sum = 0; 7 for (int i = 1; i < a; i++) { 8 if (a%i==0) { 9 sum+=i; 10 } 11 } 12 if (sum==a) {//若是函式因數和等於原數 13 return true; 14 } 15 return false; 16 } 17 public static void main(String[] args) { 18 System.out.print("輸入:"); 19 Scanner in = new Scanner(System.in); 20 int sum =0; 21 for (int i = 1; i <1000; i++) { 22 if (wanshu(i)) { 23 System.out.print(i+" ");//輸出每個完數 24 sum++; 25 } 26 } 27 System.out.print("共有"+sum);//輸出累加值 28 } 29 30 }
程式10
題目:一球從h米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第n次落地時,共經過多少米?第n次反彈多高?
題目思路:
每次高度均為上次一半 h=h/2 經過則是每次高度乘2,以sum累加 sum+=h*2
1 package test; 2 3 import java.util.Scanner; 4 public class hello { 5 6 public static void main(String[] args) { 7 System.out.print("輸入:"); 8 Scanner in = new Scanner(System.in); 9 int h =in.nextInt();//輸入高度,以及反彈次數 10 int n =in.nextInt(); 11 int sum=h; 12 for (int i = 2; i <=n; i++) { 13 h=h/2;//確定反彈高度 14 sum+=h*2;//累計經過長度 15 } 16 System.out.print("在第"+n+"次落地時,共經過"+sum+"米 第"+n+"次反彈"+h);//輸出 17 } 18 19 }