1. 程式人生 > >JAVA基礎訓練五十道

JAVA基礎訓練五十道

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