JAVA基礎訓練五十道
阿新 • • 發佈:2019-01-07
package test; /* *【程式1】 題目:古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一 對兔子,假如兔子都不死,問每個月的兔子總對數為多少? (單位/對) 原始兔子及其後代數量 第一個月 1 第二個月 1 第三個月 2 1 第四個月 3 1 第五個月 5 2 1 第六個月 8 3 1 第七個月 13 5 2 f(n) = f(n-1) + f(n-2) */ public class Test_1 { public static void main(String[] args){ int M = 24; int f1=1; //第一個月兔子的對數 int f2=2; //第二個月兔子的對數 int f=0; //儲存各個月兔子的數量 for(int i=3;i<=24;i++){ f=f1+f2; f1=f2; f2=f; System.out.println("第" + i + "個月的兔子對數:" +f); } } } package test; /* * 【程式2】 題目:判斷101-200之間有多少個素數,並輸出所有素數。 素數又叫質數,就是除了1和它本身之外,再也沒有整數能被它整除的數。也就是素數只有兩個因子。 */ public class Test_2 { public static void main(String[] args){ int cnt=0; //用於記錄素數的個數 int flag=1; //由於標記 for(int i=100;i<=200;i++){ flag=1; //每次將標記值置為1 for(int j=2;j*j<=i;j++){ if(i % j ==0){ flag=0; break; } } if(flag == 1){ //flag=1則i在2到根號i之間不能被整除,i為素數 cnt++; //素數的個數加1 System.out.print(i + " "); } } System.out.println(); System.out.println("100到200之間的素數個數為:" + cnt); } } package test; /* * 【程式3】 題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如: 153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。 設定範圍在100~1000 */ public class Test_3 { public static void main(String[] args){ //設定範圍在1000以內 int sum=0; //用來記錄一個數的各位的3次方之和 for(int i=1;i<=1000;i++){ sum = 0; //需要每次迴圈將sum的值置為0 int k=i; while(k>0){ // 提取i的各位 int t = k%10; sum = sum + t*t*t; k = k/10; } if(i == sum ){ System.out.print(i + " "); } } System.out.println(); } } package test; /* * 【程式4】 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 如果正整數為素數則輸出"不能分解質因數" */ public class Test_4 { public static void main(String[] args){ //設定正整數在200以內 int a[] = new int[50]; //用來存200以內的素數 Prime(a); int n = 177; //待分解的正整數 for(int i = 0;i<a.length;i++){ if(n == a[i] || n==1){ //判斷是否為素數,注意還有1 System.out.println("不能分解質因數!"); return; } } System.out.print(n + "="); int i=0; while(i<a.length){ if(n%a[i] == 0){ n = n/a[i]; if(n == 1){ System.out.print(a[i]); break; } else{ System.out.print(a[i] + "*"); } } else{ i++; } } } static void Prime(int a[]){//打表求出200以內的素數 int flag = 1; int cnt = 0; for(int i=2;i<=200;i++){ flag = 1; for(int j=2; j*j<=i;j++){ if(i%j==0){ flag = 0; break; } } if(flag == 1){ a[cnt++] = i; } } } } package test; /* * 【程式5】 題目:利用條件運算子的巢狀來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下 的用C表示。 */ public class Test_5 { public static void main(String[] args){ int grade = 83; if(grade>100 || grade<0){ System.out.println("學習成績有誤!"); return; } if(grade >=90){ System.out.println("A"); } else if(grade >=60){ System.out.println("B"); } else{ System.out.println("C"); } } } package test; /* * 【程式6】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。 */ import java.util.Scanner; public class Test_6 { public static void main(String[] args){ Scanner in = new Scanner(System.in); int n=0,m=0; m = in.nextInt(); n = in.nextInt(); System.out.println("最大公約數為:" + gcd(m,n) + " 最小公倍數為:" + m/gcd(m,n)*n); } static int gcd(int n,int m){ while(1>0){ n=n%m; if(n==0) return m; m=m%n; if(m==0) return n; } } } package test; /* * 程式7】 題目:輸入一行字元,分別統計出其中英文字母、空格、數字和其它字元的個數。 */ import java.util.Scanner; public class Test_7 { public static void main(String[] args){ int cnt1=0; //用來統計中英文字母的個數 int cnt2=0; //用來統計數字的個數 int cnt3=0; //用來統計空格的個數 int cnt4=0; //用來統計其他字元的個數 Scanner in = new Scanner(System.in); String s = in.nextLine(); char ch; for(int i=0;i<s.length();i++){ ch = s.charAt(i); if(((ch-'A'>=0) && ('Z'-ch >=0)) || ((ch-'a'>=0) && ('z'-ch >=0)) ){ cnt1++; } else if((ch -'0'>=0) && ('9' - ch>=0)){ cnt2++; } else if(ch == ' '){ cnt3++; } else{ cnt4++; } } System.out.println("字元中中英文字母的個數為:" + cnt1); System.out.println("字元中數字的個數為:" + cnt2); System.out.println("字元中空格的個數為:" + cnt3); System.out.println("字元中其他字元的個數為:" + cnt4); } } package test; /* * 【程式8】 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加), 幾個數相加有鍵盤控制。 */ import java.util.Scanner; public class Test_8 { public static void main(String[] args){ Scanner in = new Scanner(System.in); int a=2; //將a設定為2 int k=a; int sum=0; //將和儲存在sum中 System.out.print("請輸入需要幾個數相加:"); int n = in.nextInt(); for(int i=0;i<n;i++){ //System.out.println("-------" + k); sum = sum + k; k=k*10+a; } System.out.println(sum); } } package test; /* * 【程式9】 題目:一個數如果恰好等於它的因子之和(除其本身),這個數就稱為"完數"。例如6=1+2+3.程式設計 找出1000以內的所有完 數。 */ public class Test_9 { public static void main(String[] args){ int sum = 1; //用來儲存除其本省的因數之和 for(int i=2;i<=1000;i++){ //跳過1 sum = 1; for(int j=2;j*j<=i;j++){ if(i%j==0){ sum = sum + j + i/j; } } if(sum == i){ System.out.println(i); } } } } package test; /* * 【程式10】 題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多 少米?第10次反彈多高? */ public class Test_10 { public static void main(String[] args){ double high = 100.0; //高度 double sum = high; //經歷的路程 for(int i=0;i<9;i++){ high = high/2; sum = sum + high*2; } high = high/2; System.out.print("共經歷了:"); System.out.printf("%.4f",sum); System.out.println("米"); System.out.print("第十次反彈:"); System.out.printf("%.4f",high); System.out.println("米"); } } package test; /* * 【程式11】 題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? */ public class Test_11 { public static void main(String[] args){ int count=0; //統計個數 for(int i=1;i<=4;i++){ //百位迴圈 for(int j=1;j<=4;j++){ //十位迴圈 for(int k=1;k<=4;k++){ //個位迴圈 if(i!=j && i!=k && j!=k){ System.out.print(i*100+j*10+k + " "); count++; } } } } System.out.println(); System.out.println("共有:" + count); } } package test; /* * 【程式12】 題目:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬 元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部 分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可 提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數? */ import java.util.Scanner; public class Test_12 { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("請輸入利潤是:"); int i = in.nextInt(); double sum = 0.0; //用來儲存獎金 if(i<=10){ sum = i*0.1; } else if(i<=20){ sum = 10*0.1 + (i-10)*0.075; } else if(i<=40){ sum = 10*0.1 + 10*0.075 + (i-20) * 0.05; } else if(i<=60){ sum = 10*0.1 + 10*0.075 + 20*0.05 + (i-40)*0.03; } else if(i<=100){ sum = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + (i-60)*0.015; } else{ sum = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + 40*0.015 + (i-100)*0.01; } System.out.println("總獎金是:" + sum + "萬元"); } } package test; /* * 【程式13】 題目:一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? */ public class Test_13 { public static void main(String[] args){ int flag=1; for(int a=10;flag==1;a++){//設定a為一個完全平方數的根 for(int b=13;;b++){ //設定B為另一個完全平方數的根 if(a*a-100 == b*b-168){ System.out.println(a*a-100); flag=0; break; } if(b*b-168>a*a-100){ //控制迴圈 break; } } } } } package test; /* * 【程式14】 題目:輸入某年某月某日,判斷這一天是這一年的第幾天? */ import java.util.Scanner; public class Test_14 { static boolean LeapYear(int year){ //判斷閏年 if(year%400==0 || (year%4==0 && year%100!=0)){ return true; } else{ return false; } } public static void main(String[] args){ //設定輸入格式為20120206 int year; //用來儲存年 int mouth; //用來儲存月份 int day; //用來儲存日 int sum=0; //又來儲存第幾天 int a[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用來儲存月份日期 Scanner in = new Scanner(System.in); System.out.print("請輸入日期:"); int n = in.nextInt(); year = n/10000; //獲取年份 mouth = n/100%100; //獲取月份 day = n%100; //獲取日期 if(LeapYear(year)) a[2]=29; //閏年的2月有29天 for(int i=1;i<mouth;i++){ sum = sum + a[i]; } sum = sum +day; System.out.println(year + "年" + mouth + "月" + day + "日是" + year + "年的第" + sum + "天"); } } package test; /* * 【程式15】 題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。 */ import java.util.Scanner; public class Test_15 { static void min(int a,int b,int c){ if(a<b && a<c){ System.out.print(a + " "); if(b<c){ System.out.println(b + " " + c); } else{ System.out.println(c + " " + b); } } if(b<a && b<c){ System.out.print(b + " "); if(a<c){ System.out.println(a + " " + c); } else{ System.out.println(c + " " + a); } } if(c<b && c<a){ System.out.print(c + " "); if(b<a){ System.out.println(b + " " + a); } else{ System.out.println(a + " " + b); } } } public static void main(String[] args){ int x,y,z; Scanner in = new Scanner(System.in); System.out.print("請輸入三個整數用空格隔開:"); x = in.nextInt(); y = in.nextInt(); z = in.nextInt(); min(x,y,z); } } package test; /* * 【程式16】 題目:輸出9*9口訣。 */ public class Test_16 { public static void main(String[] args){ for(int i=1;i<10;i++){ for(int j=1;j<=i;j++){ System.out.print(i + "*" + j + "=" + (i*j) + " "); } System.out.println(); } } } package test; /* * 【程式17】 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩 下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。 */ public class Test_17 { public static void main(String[] args){ int sum=1; //記錄桃子個數 for(int i=0;i<9;i++){//迴圈九次 sum = (sum + 1)*2; //System.out.println(sum); } System.out.println(sum); } } package test; /* 【程式18】 題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單。有人向 隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請程式設計序找出三隊賽手的名單。 */ public class Test_18{ public static void main(String[] args){ char [] m = {'a' , 'b' , 'c'}; char [] n = {'x' , 'y' , 'z'}; for(int i=0;i<m.length;i++){ for(int j=0;j<n.length;j++){ if(m[i] == 'a' && n[j] == 'x'){ //a說他不和x比 continue; } else if((m[i] == 'b' && n[j] == 'y') || (m[i] == 'b' && n[j] == 'z')){ //b只能和x比 continue; } else if((m[i] == 'c' && n[j] == 'x') || (m[i] == 'c' && n[j] == 'z')){ //c說他不和x,z比 continue; } if(m[i] == 'a' && n[j] == 'y'){ //y只能和c比 continue; } else { System.out.println(m[i] + " VS " +n[j]); } } } } } package test; /* * 程式19】 題目:打印出如下圖案(菱形) * 1 *** 3 ***** 5 ******* 7 ***** *** * */ public class Test_19 { public static void main(String[] args){ for(int i=3;i>=0;i--){ for(int j=0;j<i;j++){ System.out.print(" "); } for(int j=1;j<=7-i*2;j++){ System.out.print("*"); } System.out.println(); } for(int i=1;i<=3;i++){ for(int j=0;j<i;j++){ System.out.print(" "); } for(int j=1;j<=7-i*2;j++){ System.out.print("*"); } System.out.println(); } } } package test; /* * 【程式20】 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。 */ public class Test_20 { public static void main(String[] args){ double sum = 0.0; int f1=1,f2=2,f; for(int i=0;i<20;i++){ sum = sum + f2*1.0/f1; f=f1+f2; f1=f2; f2=f; } System.out.printf("%.4f",sum); } } package test; /* * 【程式21】 題目:求1+2!+3!+...+20!的和 */ public class Test_21 { public static void main(String[] args){ long sum = 0L; long t = 1L; for(int i=1;i<=20;i++){ t = t*i; sum = sum + t; //System.out.println("t=" + t); //System.out.println("sum=" + sum); } System.out.println(sum); } } package test; /* * 【程式22】 題目:利用遞迴方法求5!。 */ public class Test_22 { static int fac(int n){ if(n==1 || n==0) return 1; else return n*fac(n-1); } public static void main(String[] args){ int sum=0; int t=5; sum = fac(t); System.out.println(sum); } } package test; /* * 【程式23】 題目:有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問 第三個人,又說比第2人大兩歲。問第2個人,說比第一個人大兩歲。最後問第一個人,他說是10歲。請問第五個 人多大? */ public class Test_23 { public static void main(String[] args){ int t=10; System.out.println(t+2*4); } } package test; /* * 【程式24】 題目:給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。 */ public class Test_24 { public static void main(String[] args){ int count=0;//用來統計數字的位數 int n = 45886; //設定整數 while(n>0){ int t = n%10; System.out.print(t + " "); n = n / 10; count++; } System.out.println(); System.out.println("它是" + count + "位數!"); } } package test; /* * 【程式25】 題目:一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。 */ public class Test_25 { public static void main(String[] args){ int count=0;//用來統計迴文數的個數 for(int i=10000;i<=99999;i++){ if((i/10000 == i%10) && (i/1000%10 == i/10%10)){ //判斷是否為迴文數 System.out.print(i + " "); count++; if(count%10==0){ System.out.println(); } } } System.out.println(); System.out.println("迴文數的個數為:" + count); } } package test; /* * 【程式26】 題目:請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續 判斷第二個字母。 題意表達不清晰:設定數輸入星期幾開頭的一個或兩個大寫字母,如果不能判斷輸出不能判斷 Monday 星期一 Tuesday 星期二 Wednesday 星期三 Thursday 星期四 Friday 星期五 Saturday 星期六 Sunday 星期日 */ import java.util.Scanner; public class Test_26 { public static void main(String[] args){ Scanner in = new Scanner(System.in); char a,b; String str = in.next(); if(str.length() == 1){ a = str.charAt(0); if(a == 'M'){ System.out.println("星期一"); } else if(a == 'W'){ System.out.println("星期三"); } else if(a == 'F'){ System.out.println("星期五"); } else{ System.out.println("不能判斷是星期幾!"); } } else{ a = str.charAt(0); b = str.charAt(1); if(a == 'M'){ System.out.println("星期一"); } else if(a == 'W'){ System.out.println("星期三"); } else if(a == 'F'){ System.out.println("星期五"); } else if(a == 'T' && b == 'U'){ System.out.println("星期二"); } else if(a == 'T' && b == 'H'){ System.out.println("星期四"); } else if(a == 'S' && b == 'a'){ System.out.println("星期六"); } else if(a == 'S' && b == 'U'){ System.out.println("星期日"); } } } } package test; /* * 【程式27】 題目:求100之內的素數 */ public class Test_27 { static void Prime(int m,int n){//求m到n以內的素數 int flag=1; //用於標記 int count = 0; //用來記錄素數的個數 for(int i=m;i<=n;i++){ if(i==0 || i==1){ continue; } flag=1; for(int j=2;j*j<=i;j++){ if(i%j == 0){ flag=0; break; } } if(flag == 1){ count++; System.out.print(i + " "); if(count%10 == 0){ System.out.println(); } } } System.out.println(); System.out.println(m + "到" + n +"以內素數的個數為:" + count); } public static void main(String[] args){ Prime(0,100); } } package test; /* * 【程式28】 題目:對10個數進行排序 */ public class Test_28 { public static void main(String[] args){ int a[] = {54,234,324,2,36,4,23,45,-3,0}; for(int i=0;i<a.length-1;i++){ //定義迴圈次數,最後一次已經排好可省略 for(int j=0;j<a.length-i-1;j++){ //每次排序在未排序佇列中選出最大或最小值 if(a[j] > a[j+1]){ //在未排序佇列中選出最大的元素 int temp = a[j]; //交換兩數位置 a[j] = a[j+1]; a[j+1] =temp; } } } for(int i=0;i<a.length;i++){ //升序輸出 System.out.print(a[i] + " "); } System.out.println(); } } package test; /* * 【程式29】 題目:求一個3*3矩陣對角線元素之和 */ public class Test_29 { public static void main(String[] args){ int a[][] = {{1,2,3}, {4,5,6}, {7,8,9}};//定義一個二維陣列來儲存3*3矩陣 int sum =0; for(int i=0;i<3;i++){ sum = sum + a[i][i]; } System.out.println(sum); } } package test; import java.util.Random; import java.util.Scanner; /* * 【程式30】 題目:有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。 */ public class Test_30 { public static void main(String[] args){ Random random = new Random(); int a[] = new int[10]; for(int i=0;i<10;i++){ //產生陣列 a[i] = random.nextInt(100); } System.out.println("未排序:"); for(int i=0;i<10;i++){ System.out.print(a[i] + " "); } System.out.println(); //排序 for(int i=0;i<a.length-1;i++){ //定義迴圈次數,最後一次已經排好可省略 for(int j=0;j<a.length-i-1;j++){ //每次排序在未排序佇列中選出最大或最小值 if(a[j] > a[j+1]){ //在未排序佇列中選出最大的元素 int temp = a[j]; //交換兩數位置 a[j] = a[j+1]; a[j+1] =temp; } } } System.out.println("排序後:"); for(int i=0;i<a.length;i++){ //升序輸出 System.out.print(a[i] + " "); } System.out.println(); int b[] = new int[11]; for(int i=0;i<a.length;i++){ b[i] = a[i]; } //插入 System.out.print("請輸入要插入的數值:"); Scanner in = new Scanner(System.in); int t=0; t = in.nextInt(); if(t>b[a.length-1]) { b[a.length] = t; } else{ for(int i=a.length-1;b[i]>=t;i--){ if(b[i]>t){ b[i+1] = b[i]; } b[i] = t; } } System.out.println("插入資料後:"); for(int i=0;i<b.length;i++){ //升序輸出 System.out.print(b[i] + " "); } } } package test; /* * 【程式31】 題目:將一個數組逆序輸出。 */ import java.util.Random; public class Test_31 { public static void main(String[] args){ Random random = new Random(); int a[] = new int[10]; for(int i=0;i<10;i++){ //產生陣列 a[i] = random.nextInt(100); } System.out.println("未排序:"); for(int i=0;i<a.length;i++){ System.out.print(a[i] + " "); } System.out.println(); for(int i=a.length-1;i>=0;i--){ System.out.print(a[i] + " "); } System.out.println(); } } package test; /* * 【程式32】 題目:取一個整數a從右端開始的4~7位。 */ public class Test_32 { public static void main(String[] args){ int n = 12345678; //設整數位n n = n/1000; // 去掉n的後三位 for(int i=0;i<4;i++){ int t = n%10; System.out.print(t + " "); n = n/10; } System.out.println(); } } package test; /* 【程式33】 題目:打印出楊輝三角形(要求打印出10行如下圖) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 */ public class Test_33{ public static void main(String[] args) { int[][] a = new int[10][10]; for(int i=0; i<10; i++) { a[i][i] = 1; a[i][0] = 1; } for(int i=2; i<10; i++) { for(int j=1; j<i; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } for(int i=0; i<10; i++) { for(int k=0; k<2*(10-i)-1; k++) { System.out.print(" "); } for(int j=0; j<=i; j++) { System.out.print(a[i][j] + " "); } System.out.println(); } } } package test; /* * 【程式34】 題目:輸入3個數a,b,c,按大小順序輸出。 */ import java.util.Scanner; public class Test_34 { public static void main(String[] args){ int a,b,c; Scanner in =new Scanner(System.in); a = in.nextInt(); b = in.nextInt(); c = in.nextInt(); if(a>=b && a>=c){ System.out.print(a + " "); if(b>=c){ System.out.println(b + " " + c); } else{ System.out.println(c + " " + b); } } else if(b>=a && b>=c){ System.out.print(b + " "); if(a>=c){ System.out.println(a + " " + c); } else{ System.out.println(c + " " + a); } } else{ System.out.print(c + " "); if(a>=b){ System.out.println(a + " " + b); } else{ System.out.println(b + " " + a); } } } } package test; /* * 【程式35】 題目:輸入陣列,最大的與第一個元素交換,最小的與最後一個元素交換,輸出陣列。 */ import java.util.Random; public class Test_35 { public static void main(String[] args){ Random random = new Random(); int a[] = new int[10]; for(int i=0;i<a.length;i++){ a[i] = random.nextInt(100); } System.out.println("陣列為:"); for(int i=0;i<a.length;i++){ System.out.print(a[i] + " "); } System.out.println(); int max = 0,min=100,mmax=0,mmin=0; for(int i=0;i<a.length;i++){ if(a[i] >=max){ max = a[i]; mmax =i; } if(a[i] <= min){ min = a[i]; mmin = i; } } a[mmax] = a[0]; a[0] = max; a[mmin] = a[a.length-1]; a[a.length-1] = min; System.out.println("交換後的陣列為:"); for(int i=0;i<a.length;i++){ System.out.print(a[i] + " "); } System.out.println(); } } package test; /* * 【程式36】 題目:有n個整數,使其前面各數順序向後移m個位置,最後m個數變成最前面的m個數 */ import java.util.Random; public class Test_36 { public static void main(String[] args){ Random random = new Random(); int n = 10; //設定n為10 int m = 4; //設定 m 為4 int a[] = new int[10]; int b[] = new int[4]; for(int i=0;i<n;i++){ a[i] = random.nextInt(100); } System.out.println("陣列為:"); for(int i=0;i<n;i++){ System.out.print(a[i] + " "); } System.out.println(); for(int i=n-m,j=0;i<n;i++){ b[j++] = a[i]; } for(int i=n-m-1;i>=0;i--){ a[i+m] = a[i]; } for(int i=0;i<m;i++){ a[i] = b[i]; } System.out.println("移動後的陣列為:"); for(int i=0;i<n;i++){ System.out.print(a[i] + " "); } System.out.println(); } } package test; /* 【程式37】 題目:有n個人圍成一圈,順序排號。從第一個人開始報數(從1到3報數),凡報到3的人退出圈子, 問最後留下的是原來第幾號的那位。? */ import java.util.Scanner; public class Test_37 { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.print("請輸入一個整數n:"); int n = s.nextInt(); boolean[] arr = new boolean[n]; for(int i=0; i<arr.length; i++) { arr[i] = true; } int leftCount = n; int countNum = 0; int index = 0; while(leftCount > 1) { if(arr[index] == true) { countNum ++; if(countNum == 3) { countNum =0; arr[index] = false; leftCount --; } } index ++; if(index == n) { index = 0; } } for(int i=0; i<n; i++) { if(arr[i] == true) { System.out.println("原來排在第"+(i+1)+"的位置的人留下了"); } } } } package test; /* * 【程式38】 題目:寫一個函式,求一個字串的長度,在main函式中輸入字串,並輸出其長度。 */ import java.util.Scanner; public class Test_38 { static int init(String str){ return str.length(); } public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.println(str); int t = init(str); System.out.println(t); } } package test; /* * 【程式39】 題目:編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,當輸入n為奇數時,呼叫函式 1/1+1/3+...+1/n(利用指標函式) */ import java.util.Scanner; public class Test_39 { static void init(int n){ if(n==0) { System.out.println(n); return; } float sum = 0; if(n%2 == 0){ for(int i = 2;i<=n;i=i+2){ sum = sum + (float)(1.0/i); } } else{ for(int i = 1;i<=n;i=i+2){ sum = sum + (float)(1.0/i); } } System.out.printf("%.4f",sum); System.out.println(); } public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("請輸入整數n:"); int n =in.nextInt(); init(n); } } package test; /* * 【程式40】 題目:字串排序。 將字串按照字典序排序,輸出較大的那個 */ public class Test_40 { static boolean compare(String s1,String s2){//如果s1的字典序大於等於s2,返回true,否則返回false for(int i=0;i<s1.length() && i<s2.length();i++){ if(s1.charAt(i) - s2.charAt(i) > 0) { return true; } else if(s1.charAt(i) - s2.charAt(i) < 0){ return false; } } if(s1.length() >= s2.length()){ return true; } else{ return false; } } public static void main(String[] args){ String str1 = "dgshj"; String str2 = "dgshjkl"; System.out.println("兩個字串中較大的是:"); if(compare(str1,str2)){ System.out.println(str1); } else{ System.out.println(str2); } } } package test; /* * 【程式41】 題目:海灘上有一堆桃子,五隻猴子來分。第一隻猴子把這堆桃子平均分為五份,多了一個,這隻猴子把多的一 個扔入海中,拿走了一份。第二隻猴子把剩下的桃子又平均分成五份,又多了一個,它同樣把多的一個扔入海中 ,拿走了一份,第三、第四、第五隻猴子都是這樣做的,問海灘上原來最少有多少個桃子? 1 781 2 156 3 31 4 5 4 第五個猴子來玩之後剩餘的桃子數必然為4的倍數 */ public class Test_41 { public static void main(String[] args){ int count=1; //記錄剩餘多少次數 int flag=1; for(int i = 4;flag==1;i=i+4){//用i表示最後剩餘的桃子數目,保證最後一次 count=0; int t = i/4*5+1; for(int j=0;j<5;j++){//往回求5次 if(t % 4==0){ count++; t = t/4*5+1; //System.out.println("原來桃子數目為:" + t); if(count==4){ System.out.println("原來桃子數目為:" + t); flag=0;//結束大迴圈 break; } } else{ break; } } } } } package test; /* 【程式42】 題目:809*??=800*??+9*??+1 其中??代表的兩位數,8*??的結果為兩位數,9*??的結果為3位數。求??代表的兩位數,及809*??後的結果。 //題目錯了:809*??=800*??+9*??+1這個方程無解,改為809*??=800*??+9*?? */ public class Test_42 { public static void main(String[] args){ for(int i=10;i<100;i++){ if(i*8<100 && i*9>=100){ System.out.println("??=" + i +", 809*?? = 809*" + i + "=" + i*809); } } } } package test; /* * 【程式43】 題目:求0—7所能組成的奇數個數。 每個數字可用能用多次 組成1位數 4 組成2位數 7*4 組成3位數 7*8*4 .... */ public class Test_43 { public static void main(String[] args){ int sum=4; int t=28; sum = sum + t; for(int i=0;i<6;i++){ t = t * 8; sum = sum + t; //System.out.println(sum); } System.out.println("0—7所能組成的奇數個數為:"+sum); } } package test; /* * 【程式44】 題目:一個偶數總能表示為兩個素數之和。(一個大於等於4的偶數肯定能表示為兩個素數之和) 設定範圍:4~1000000 */ import java.util.Scanner; public class Test_44 { public static void main(String[] args){ int a[] = new int[100000];//用來儲存素數 boolean hash[] = new boolean[1000001];//用來儲存這個數是不是素數 //int flag =1; int count=0; for(int i=0;i<=1000000;i++){ hash[i] = true; //flag=1; if(i==0 || i==1){ continue; } for(int j=2;j*j<=i;j++){ if(i % j == 0){ hash[i] = false; break; } } if(hash[i]){ a[count++] = i; } } System.out.print("請輸入一個偶數:"); Scanner in = new Scanner(System.in); int n = in.nextInt(); //for(int j=4;j<=1000;j=j+2){ // int n = j; for(int i=0;i<a.length;i++){ if(hash[n-a[i]]){ System.out.println(n + "=" + a[i] + "+" + (n-a[i])); break; } } //} } } package test; /* 【程式45】 題目:判斷一個素數能被幾個9整除 //題目錯了 :改為一個整數能被幾個9整除 */ public class Test_45 { public static void main(String[] args){ int n = 243; int count=0; //統計被9整除的個數 while(n>0){ if(n%9==0){ count++; n=n/9; } else{ if(count==0){ System.out.println("該數不能被9整除!"); break; } else{ System.out.println("該數能被9整除" + count +"次!"); break; } } } } } package test; /* * 【程式46】 題目:兩個字串連線程式 */ public class Test_46 { public static void main(String[] args){ String str1 = "asdf"; String str2 = "qwer"; //System.out.println(str1.concat(str2)); //利用String的類的concat方法 //concat(str1,str2); char[] s = concat(str1,str2); //自己編寫函式呼叫 for(int i=0;i<s.length;i++){ System.out.print(s[i]); } System.out.println(); } private static char[] concat(String str1, String str2) { // TODO Auto-generated method stub char s[] = new char[str1.length()+str2.length()]; for(int i=0;i<str1.length();i++){ s[i] = str1.charAt(i); } for(int i=str1.length();i<str1.length()+str2.length();i++){ s[i] = str2.charAt(i-str1.length()); } return s; } } package test; /* 【程式47】 題目:讀取7個數(1—50)的整數值,每讀取一個值,程式打印出該值個數的*。 */ import java.util.Scanner; public class Test_47{ public static void main(String[] args){ Scanner in = new Scanner(System.in); for(int i=0;i<7;i++){ int n = in.nextInt(); for(int j=0;j<n;j++){ System.out.print("*"); } System.out.println(); } } } /* 【程式48】 題目:某個公司採用公用電話傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下:每位數字 都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。 */ public class Test_48{ public static void main(String[] args){ int n=1594; int a = n/1000; int b = n/100%10; int c = n/10%10; int d = n%10; a=(a+5)%10; b=(b+5)%10; c=(c+5)%10; d=(d+5)%10; int temp=0; temp = a; a = d; d = temp; temp = b; b = c; c = temp; int ans = a*1000+b*100+c*10+d; System.out.println(ans); } } package test; /* * 【程式49】 題目:計算字串中子串出現的次數 */ import java.util.Scanner; public class Test_49 { public static void main(String[] args){ Scanner in = new Scanner(System.in); System.out.print("請輸入主串:"); String str = in.nextLine(); System.out.print("請輸入字串:"); String s = in.nextLine(); int count=0;//用來記錄字串出現的次數 int i=0,j=0; while(i<str.length() && j<s.length()){ if(str.charAt(i) == s.charAt(j)){//如果字元相同則兩個字元都增加 i++; j++; } else{ i=i-j+1; //主串字元回到比較最開始比較的後一個字元 j=0; //字串字元重新開始 } if(j == s.length()){//如果匹配成功 count++; //字串出現的次數加1 System.out.println(i); i=i-j+1; //主串字元回到比較最開始比較的後一個字元 j=0; //字串字元重新開始 } } System.out.println("字串" + s + "在" + "字串"+ str +"中出現的次數為:" + count); } } package test; /* * 【程式50】 題目:有五個學生,每個學生有3門課的成績,從鍵盤輸入以上資料(包括學生號,姓名,三門課成績),計算出平均成績, 況原有的資料和計算出的平均分數存放在磁碟檔案"stud"中。 */ import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.Scanner; public class Test_50 { public static void main(String[] args){ Scanner ss = new Scanner(System.in); String [][] a = new String[5][6]; for(int i=1; i<6; i++) { System.out.print("請輸入第"+i+"個學生的學號:"); a[i-1][0] = ss.nextLine(); System.out.print("請輸入第"+i+"個學生的姓名:"); a[i-1][1] = ss.nextLine(); for(int j=1; j<4; j++) { System.out.print("請輸入該學生的第"+j+"個成績:"); a[i-1][j+1] = ss.nextLine(); } System.out.println("\n"); } //以下計算平均分 float avg; int sum; for(int i=0; i<5; i++) { sum=0; for(int j=2; j<5; j++) { sum=sum+ Integer.parseInt(a[i][j]); } avg= (float)sum/3; a[i][5]=String.valueOf(avg); } //以下寫磁碟檔案 String s1; try { File f = new File("f:\\stud"); if(f.exists()){ System.out.println("檔案存在"); }else{ System.out.println("檔案不存在,正在建立檔案"); f.createNewFile();//不存在則建立 } BufferedWriter output = new BufferedWriter(new FileWriter(f)); for(int i=0; i<5; i++) { for(int j=0; j<6; j++) { s1=a[i][j]+"\r\n"; output.write(s1); } } output.close(); System.out.println("資料已寫入f盤檔案stud中!"); }catch (Exception e) { e.printStackTrace(); } } } /* [程式51] 不使用中間變數 把兩個變數的值互換 */ public class Test_51 { public static void main(String[] args) { int a=5; int b=6; System.out.println("交換前:a=" +a + ",b=" + b); /*利用加法交換 a = a + b; b = a - b; a = a - b; */ /*利用乘法交換 a = a * b; b = a / b; a = a / b; */ ///*利用異或交換 a = a^b; b = a^b; a = a^b; //*/ System.out.println("交換後:a=" +a + ",b=" + b); } }