JAVA編程練習題(1--10)

1:java

/**
 * 題目:古典問題:有一對兔子,從出生後第3個月起每月都生一對兔子, 小兔子長到第三個月後每月又生一對兔子, 假如兔子都不死,問每月的兔子對數爲多少?
 * 程序分析: 兔子的規律爲數列1,1,2,3,5,8,13,21....
 * 
 * @author super
 *
 */
public class Test {

	public static void main(String[] args) {
		for (int i = 1; i <= 20; i++) {
			System.out.println("第" + i + "個月的兔子總數爲:" + Rabbit(i));
		}

	}

	// 遞歸處理
	public static int Rabbit(int n) {
		// 前兩個月兔子總數各爲1
		if (n == 1 || n == 2) {
			return 1;
		} else {
			// 第三個月開始,每月兔子總數爲上個月和上上個月的和
			return Rabbit(n - 1) + Rabbit(n - 2);
		}
	}
	
}

輸出:git

第1個月的兔子總數爲:1express

第2個月的兔子總數爲:1編程

第3個月的兔子總數爲:2數組

第4個月的兔子總數爲:3app

第5個月的兔子總數爲:5ide

第6個月的兔子總數爲:8學習

第7個月的兔子總數爲:13測試

第8個月的兔子總數爲:21ui

第9個月的兔子總數爲:34

第10個月的兔子總數爲:55

第11個月的兔子總數爲:89

第12個月的兔子總數爲:144

第13個月的兔子總數爲:233

第14個月的兔子總數爲:377

第15個月的兔子總數爲:610

第16個月的兔子總數爲:987

第17個月的兔子總數爲:1597

第18個月的兔子總數爲:2584

第19個月的兔子總數爲:4181

第20個月的兔子總數爲:6765


2:

題目:判斷101-200之間有多少個素數,並輸出全部素數。

public class Test {

	public static void main(String[] args) {
		GetSuShu(101, 200);

	}

	/***
	 * 獲取a,b之間的全部素數並統計輸出
	 * 
	 * @param a
	 *            起始數字
	 * @param b
	 *            結束數字
	 */
	public static void GetSuShu(int a, int b) {
		// 統計素數個數
		int count = 0;
		// 外循環遍歷既定數字範圍
		for (int i = a; i <= b; i++) {
			// 新建一個判斷變量
			boolean flag = true;
			// 從2開始到自身依次相除判斷是否素數
			for (int j = 2; j < i; j++) {
				// 若是不是素數則改成false並跳出內循環
				if (i % j == 0) {
					flag = false;
					break;
				}
			}
			// 若是遍歷結束肯定是素數則統計並輸出
			if (flag) {
				count++;
				System.out.println("第" + count + "個素數:" + i);
			}
		}
	}
}

輸出:

第1個素數:101

第2個素數:103

第3個素數:107

第4個素數:109

第5個素數:113

第6個素數:127

第7個素數:131

第8個素數:137

第9個素數:139

第10個素數:149

第11個素數:151

第12個素數:157

第13個素數:163

第14個素數:167

第15個素數:173

第16個素數:179

第17個素數:181

第18個素數:191

第19個素數:193

第20個素數:197

第21個素數:199


3:

題目:打印出全部的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數自己。例如:153是一個"水仙花數",由於153=1的三次方+5的三次方+3的三次方。

public class Test {

	public static void main(String[] args) {
		// 打印水仙花數
		// 某個n位數字每一位的n次方相加等於n
		// 1^3+5^3+3^=1+125+27=153
		int ShuiSum = 0;
		for (int i = 0; i < 1000; i++) {
			if (i == Math.pow(i % 10, 3) + Math.pow(i / 100, 3) + Math.pow(i / 10 - (i / 100) * 10, 3)) {
				// 個位數字 百位數字 十位數字
				System.out.println(i);
				ShuiSum++;
			}
		}
		System.out.println("共有水仙花數" + ShuiSum + "個");
	}
}

輸出:

0

1

153

370

371

407

共有水仙花數6個


4:

題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。

程序分析:對n進行分解質因數,應先找到一個最小的質數k,而後按下述步驟完成:

(1)若是這個質數恰等於n,則說明分解質因數的過程已經結束,打印出便可。

(2)若是n<>k,但n能被k整除,則應打印出k的值,並用n除以k的商,做爲新的正整數n,重複執行第一步。

(3)若是n不能被k整除,則用k+1做爲k的值,重複執行第一步。

Test1:

public class Test {

	public static void main(String[] args) {
		// 給定一個測試的數字
		int n = 120;
		// 先輸出一個 「120=」
		System.out.print(n + "=");
		// 從2開始遍歷該數字的質數
		for (int i = 2; i <= n; i++) {
			// 若是能整除,是質數則繼續
			if (n % i == 0) {
				// 是否相同
				if (n == i) {
					// 若是相同則僅輸出數字並跳出循環
					System.out.print(i);
					break;
				}
				// 若是不相同說明還可能有後續質數,更新n的值
				n /= i;
				// 輸出 當前質數i 並加上* 號
				System.out.print(i + "*");

				// 因爲獲取最小質數後可能還有相同的一個最小質數,因此須要回滾i變量
				// 因爲每次獲取到的確定是當前最小的質數,因此只須要回滾1就能夠了
				i--;
			}
		}
	}
}

輸出:

120=2*2*2*3*5


Test2:

public classProg4{
    public static void main(String[] args){
        int n = 13;
        decompose(n);
    }
    private static void decompose(int n){
        System.out.print(n+"=");
        for(int i=2;i<n+1;i++){
            while(n%i==0 && n!=i){
                n/=i;
                System.out.print(i+"*");
            }
            if(n==i){
                System.out.println(i);
                break;
            }
        }
    }
}


5

題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同窗用A表示,60-89分之間的用B表示,60分如下的用C表示。

程序分析:(a>b)?a:b這是條件運算符的基本例子。

Test:

public class Test {

	public static void main(String[] args) {
		int score = 46;
		String grade = score >= 90 ? "A" : score >= 60 ? "B" : "C";
		System.out.println(grade);
	}
}

輸出:

C


Test2:

public class Prog5{
       publicstatic void main(String[] args){
              intn = -1;
              try{
                     n= Integer.parseInt(args[0]);
              }catch(ArrayIndexOutOfBoundsExceptione){
                     System.out.println("請輸入成績");
                     return;
              }
              grade(n);
       }
       //成績等級計算
       privatestatic void grade(int n){
              if(n>100|| n<0)
                System.out.println("輸入無效");
              else{
                String str = (n>=90)?"分,屬於A等":((n>60)?"分,屬於B等":"分,屬於C等");
                System.out.println(n+str);
              }
       }
}


6:

題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。

Test:

public class Test {

	public static void main(String[] args) {
		int a = 120;
		int b = 90;
		System.out.println(a + "和" + b + "的最大公約數爲:" + GetGongYue(a, b));
		System.out.println(a + "和" + b + "的最小公倍數爲:" + GetGongBei(a, b));
	}

	/***
	 * 獲取兩個正整數的最大公約數
	 * 
	 * @param a
	 *            參數
	 * @param b
	 *            參數
	 * @return 兩個數的最大公約數
	 */
	public static int GetGongYue(int a, int b) {
		// 初始化最大公約數爲較小數字
		int gongYue = (a < b ? a : b);
		// 從較小數字開始向下遍歷,知足添加即賦值並跳出循環
		for (int i = gongYue;; i--) {
			if (a % i == 0 && b % i == 0) {
				gongYue = i;
				break;
			}
		}
		return gongYue;
	}

	/***
	 * 獲取兩個正整數的最小公倍數
	 * 
	 * @param a
	 *            參數
	 * @param b
	 *            參數
	 * @return 兩個數字的最小公倍數
	 */
	public static int GetGongBei(int a, int b) {
		// 初始化最小公倍數爲較大數字
		int gongBei = (a > b ? a : b);
		// 向上遍歷知足條件即賦值並跳出循環
		for (int i = gongBei;; i++) {
			if (i % a == 0 && i % b == 0) {
				gongBei = i;
				break;
			}
		}
		return gongBei;
	}
}

輸出:

120和90的最大公約數爲:30

120和90的最小公倍數爲:360


Test2:

public classProg6{
    public static void main(String[] args){
        int m,n;
        try{
            m = Integer.parseInt(args[0]);
            n = Integer.parseInt(args[1]);
        }catch(ArrayIndexOutOfBoundsExceptione){
            System.out.println("輸入有誤");
            return;
        }
        max_min(m,n);
    }
    //求最大公約數和最小公倍數
    private static void max_min(int m, int n){
        int temp = 1;
        int yshu = 1;
        int bshu = m*n;
        if(n<m){
            temp = n;
            n = m;
            m = temp;
        }
        while(m!=0){
            temp = n%m;
            n = m;
            m = temp;
        }
        yshu = n;
        bshu /= n;
        System.out.println(m+"和"+n+"的最大公約數爲"+yshu);
        System.out.println(m+"和"+n+"的最小公倍數爲"+bshu);
    }
}


7:

題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。

public class Test {

	public static void main(String[] args) {
		Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
		System.out.println("--------------------------");
		Check("sfs4564 4564fdg 4564gfd456 $%dgdf^%&%&");
	}

	// 題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。
	private static void Check(String s) {
		int enNum = 0;
		int nuNum = 0;
		int kongNum = 0;
		int othNum = 0;
		// 轉換成字符數組遍歷
		char[] chs = s.toCharArray();
		for (int i = 0; i < chs.length; i++) {
			// 若是是數字
			if (Character.isDigit(chs[i])) {
				nuNum++;
				// 是否字母
			} else if (Character.isLetter(chs[i])) {
				enNum++;
				// 是否空格
			} else if (chs[i] == ' ') {
				kongNum++;
			} else {
				// 其餘字符
				othNum++;
			}
		}
		System.out.println("數字字符數量爲:" + nuNum);
		System.out.println("字母字符數量爲:" + enNum);
		System.out.println("空格字符數量爲:" + kongNum);
		System.out.println("其餘字符數量爲:" + othNum);
	}
	
	//調用字符串charAt()方法遍歷
	private static void Check2(String s) {
		int enNum = 0;
		int nuNum = 0;
		int kongNum = 0;
		int othNum = 0;
		for (int i = 0; i < s.length(); i++) {
			if (Character.isDigit(s.charAt(i))) {
				nuNum++;
			} else if (Character.isLetter(s.charAt(i))) {
				enNum++;
			} else if (s.charAt(i) == ' ') {
				kongNum++;
			} else {
				othNum++;
			}
		}
		System.out.println("數字字符數量爲:" + nuNum);
		System.out.println("字母字符數量爲:" + enNum);
		System.out.println("空格字符數量爲:" + kongNum);
		System.out.println("其餘字符數量爲:" + othNum);
	}
}

輸出:

數字字符數量爲:15

字母字符數量爲:13

空格字符數量爲:3

其餘字符數量爲:7

--------------------------

數字字符數量爲:15

字母字符數量爲:13

空格字符數量爲:3

其餘字符數量爲:7


Test2:

importjava.util.Scanner;
public classProg7_1{
    public static void main(String[] args){
        System.out.print("請輸入一串字符:");
        Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();//將一行字符轉化爲字符串
        scan.close();
        count(str);
    }
    //統計輸入的字符數
    private static void count(String str){
        String E1 ="[\u4e00-\u9fa5]";//漢字
        String E2 = "[a-zA-Z]";
        String E3 = "[0-9]";
        String E4 = "\\s";//空格
        int countChinese = 0;
        int countLetter = 0;
        int countNumber = 0;
        int countSpace = 0;
        int countOther = 0;
        char[] array_Char = str.toCharArray();//將字符串轉化爲字符數組
        String[] array_String = newString[array_Char.length];//漢字只能做爲字符串處理
        for(int i=0;i<array_Char.length;i++)
         array_String[i] = String.valueOf(array_Char[i]);
        //遍歷字符串數組中的元素
        for(String s:array_String){
            if(s.matches(E1))
             countChinese++;
            else if(s.matches(E2))
             countLetter++;
            else if(s.matches(E3))
             countNumber++;
            else if(s.matches(E4))
             countSpace++;
            else
             countOther++;
        }
        System.out.println("輸入的漢字個數:"+countChinese);
        System.out.println("輸入的字母個數:"+countLetter);
        System.out.println("輸入的數字個數:"+countNumber);
        System.out.println("輸入的空格個數:"+countSpace);
        System.out.println("輸入的其它字符個數:"+countSpace);
    }
}
importjava.util.*;
public classProg7_2{
    public static void main(String[] args){
     System.out.println("請輸入一行字符:");
     Scanner scan = new Scanner(System.in);
     String str = scan.nextLine();
     scan.close();
     count(str);
    }
    //統計輸入的字符
    private static void count(String str){
        List<String> list = newArrayList<String>();
        char[] array_Char = str.toCharArray();
        for(char c:array_Char)
         list.add(String.valueOf(c));//將字符做爲字符串添加到list表中
        Collections.sort(list);//排序
        for(String s:list){
            int begin = list.indexOf(s);
            int end = list.lastIndexOf(s);
            //索引結束統計字符數
            if(list.get(end)==s)
             System.out.println("字符‘"+s+"’有"+(end-begin+1)+"個");
        }
    }
}


8:

題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

程序分析:關鍵是計算出每一項的值。

public class Test {

	public static void main(String[] args) {

		for (int i = 1; i < 10; i++) {
			System.out.println(Sum(2, i));
		}
	}

	/***
	 * 特殊求和方法 求s=a+aa+aaa+aaaa+aa...a的值
	 * 
	 * @param a
	 *            要作相加操做的數字
	 * @param count
	 *            相加的次數
	 * @return 總和
	 */
	private static int Sum(int a, int count) {
		// 求和變量
		int sum = 0;
		// 臨時變量
		int temp = a;
		// 經歷count次求和
		for (int i = 0; i < count; i++) {
			// 第一次的和即a的值
			sum += temp;
			// 以後的值每次更新爲a上一次的值乘10再加上a
			temp = temp * 10 + a;
		}
		return sum;
	}	
}

Test2:

importjava.util.Scanner;
 
public classProg8{
    public static void main(String[] args){
        System.out.print("求s=a+aa+aaa+aaaa+...的值,請輸入a的值:");
        Scanner scan = newScanner(System.in).useDelimiter("\\s*");//以空格做爲分隔符
        int a = scan.nextInt();
        int n = scan.nextInt();
        scan.close();//關閉掃描器
        System.out.println(expressed(2,5)+add(2,5));
    } 
    //求和表達式
    private static String expressed(int a,intn){
        StringBuffer sb = new StringBuffer();
        StringBuffer subSB = new StringBuffer();
        for(int i=1;i<n+1;i++){
         subSB = subSB.append(a);
         sb = sb.append(subSB);
         if(i<n)
           sb = sb.append("+");
        }
        sb.append("=");
        return sb.toString();
    }
    //求和
    private static long add(int a,int n){
        long sum = 0;
        long subSUM = 0;
        for(int i=1;i<n+1;i++){
            subSUM = subSUM*10+a;
            sum = sum+subSUM;
        }
        return sum;
    }
}


9:

題目:一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。


Test:

public class CeShi {
	/**
	 * 題目:一個數若是剛好等於它的因子之和,這個數就稱爲"完數"。例如6=1+2+3.編程找出1000之內的全部完數。
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		WanShu(1000);
	}

	/***
	 * 
	 * @param n
	 */
	private static void WanShu(int n) {
		int count = 0;
		// 從1到給定的數字n遍歷
		for (int i = 1; i <= n; i++) {
			// 待用變量
			int temp = 0;
			// 內循環從1到n/2獲取各個最小質數
			for (int j = 1; j <= n / 2; j++) {
				// 判斷是否當前數字的質數
				if (i % j == 0) {
					// 若是是質數就累加
					temp += j;
					// 若是質數累加的結果和當前數字相同,則斷定爲完數並輸出
					if (temp == i) {
						System.out.println(i);
						count++;
					}
				}
			}

		}
		System.out.println(n + "之內共有" + count + "個完數");
	}
}

輸出:

1

6

24

28

496

1000之內共有5個完數


10:

題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共通過多少米?第10次反彈多高?

Test:

public class CeShi {
	/**
	 * 題目:一球從100米高度自由落下,每次落地後反跳回原高度的一半; 再落下,求它在 第10次落地時,共通過多少米?第10次反彈多高?
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			GetHeight(i);
			System.out.println("------------------------------");
		}

	}

	private static void GetHeight(int count) {
		// 統計第count次彈起時通過的距離
		double sum = 0.0;
		// 統計第count次下落時通過的距離
		double sum2 = 0.0;
		// 原始高度
		double height = 100.0;

		for (int i = 1; i <= count; i++) {
			// 每次彈起時通過的距離爲下落時高度的1.5倍
			sum += height + height / 2;
			// 當達到第count次時,彈起時的總距離減去最後一次彈起的高度即爲第count次下落時通過的距離
			if (i == count) {
				sum2 = sum - height / 2;
				System.out.println("第" + count + "次時彈起的高度爲:" + height / 2);
			}
			// 每彈起一次,起始下落高度減半
			height /= 2;

		}
		System.out.println("第" + count + "次落下時通過的距離是:" + sum2 + "米。");
		System.out.println("第" + count + "次彈起時通過的距離是:" + sum + "米。");
	}
}

輸出:

第1次時彈起的高度爲:50.0

第1次落下時通過的距離是:100.0米。

第1次彈起時通過的距離是:150.0米。

------------------------------

第2次時彈起的高度爲:25.0

第2次落下時通過的距離是:200.0米。

第2次彈起時通過的距離是:225.0米。

------------------------------

第3次時彈起的高度爲:12.5

第3次落下時通過的距離是:250.0米。

第3次彈起時通過的距離是:262.5米。

------------------------------

第4次時彈起的高度爲:6.25

第4次落下時通過的距離是:275.0米。

第4次彈起時通過的距離是:281.25米。

------------------------------

第5次時彈起的高度爲:3.125

第5次落下時通過的距離是:287.5米。

第5次彈起時通過的距離是:290.625米。

------------------------------

第6次時彈起的高度爲:1.5625

第6次落下時通過的距離是:293.75米。

第6次彈起時通過的距離是:295.3125米。

------------------------------

第7次時彈起的高度爲:0.78125

第7次落下時通過的距離是:296.875米。

第7次彈起時通過的距離是:297.65625米。

------------------------------

第8次時彈起的高度爲:0.390625

第8次落下時通過的距離是:298.4375米。

第8次彈起時通過的距離是:298.828125米。

------------------------------

第9次時彈起的高度爲:0.1953125

第9次落下時通過的距離是:299.21875米。

第9次彈起時通過的距離是:299.4140625米。

------------------------------

第10次時彈起的高度爲:0.09765625

第10次落下時通過的距離是:299.609375米。

第10次彈起時通過的距離是:299.70703125米。

------------------------------


Test2:

importjava.util.Scanner;
public classProg10{
    public static void main(String[] args){
        System.out.print("請輸入小球落地時的高度和求解的次數:");
        Scanner scan = newScanner(System.in).useDelimiter("\\s");
        int h = scan.nextInt();
        int n = scan.nextInt();
        scan.close();
        distance(h,n);
    }
    //小球從h高度落下,經n次反彈後通過的距離和反彈的高度
    private static void distance(int h,int n){
        double length = 0;
        for(int i=0;i<n;i++){
            length += h;
            h /=2.0 ;
        }
        System.out.println("通過第"+n+"次反彈後,小球共通過"+length+"米,"+"第"+n+"次反彈高度爲"+h+"米");
    }
}
相關文章
相關標籤/搜索