Java 實現 C 語言經典 100 例(11 - 15)

1. 實例 11

1.1 題目

古典問題(兔子生崽):有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數爲多少?(輸出前40個月即可)

1.2 思路

兔子的規律爲數列1,1,2,3,5,8,13,21…,即下個月是上兩個月之和(從第三個月開始),利用遞歸求每個月的兔子數,然後求和

1.3 代碼

/**
 * @ClassName : Eleven
 * @Author : cunyu1943
 * @Date : 2020/6/19 16:42
 * @Version : 1.0
 * @Description : 實例 11
 **/

public class Eleven {
    public static void main(String[] args) throws Exception {

        for (int i = 1; i <= 40; i++) {
            int sum = 0;
            sum += Sum(i);
            System.out.format("第 %d 個月的兔子總數是: %d", i, sum);
            System.out.println();
        }
    }

    /**
     * @return 第 n 個月的兔子數
     * @MethodName Sum
     * @Author cunyu1943
     * @Date 17:07 2020/6/19
     * @Param n 第 n 個月
     * @Description 求第 n 個月的兔子數
     **/
    public static int Sum(int n) {
        int count = 0;
        // 第 1, 2 個月爲 1,從第三個三月開始爲前兩月之和
        if (n == 1 || n == 2) {
            return 1;
        } else {
            count = Sum(n - 1) + Sum(n - 2);
        }
        return count;
    }
}

1.4 結果

第 1 個月的兔子總數是: 1
第 2 個月的兔子總數是: 1
第 3 個月的兔子總數是: 2
第 4 個月的兔子總數是: 3
第 5 個月的兔子總數是: 5
第 6 個月的兔子總數是: 8
第 7 個月的兔子總數是: 13
第 8 個月的兔子總數是: 21
第 9 個月的兔子總數是: 34
第 10 個月的兔子總數是: 55
第 11 個月的兔子總數是: 89
第 12 個月的兔子總數是: 144
第 13 個月的兔子總數是: 233
第 14 個月的兔子總數是: 377
第 15 個月的兔子總數是: 610
第 16 個月的兔子總數是: 987
第 17 個月的兔子總數是: 1597
第 18 個月的兔子總數是: 2584
第 19 個月的兔子總數是: 4181
第 20 個月的兔子總數是: 6765
第 21 個月的兔子總數是: 10946
第 22 個月的兔子總數是: 17711
第 23 個月的兔子總數是: 28657
第 24 個月的兔子總數是: 46368
第 25 個月的兔子總數是: 75025
第 26 個月的兔子總數是: 121393
第 27 個月的兔子總數是: 196418
第 28 個月的兔子總數是: 317811
第 29 個月的兔子總數是: 514229
第 30 個月的兔子總數是: 832040
第 31 個月的兔子總數是: 1346269
第 32 個月的兔子總數是: 2178309
第 33 個月的兔子總數是: 3524578
第 34 個月的兔子總數是: 5702887
第 35 個月的兔子總數是: 9227465
第 36 個月的兔子總數是: 14930352
第 37 個月的兔子總數是: 24157817
第 38 個月的兔子總數是: 39088169
第 39 個月的兔子總數是: 63245986
第 40 個月的兔子總數是: 102334155

2. 實例 12

2.1 題目

判斷101到200之間的素數。

2.2 思路

用一個數分別去除 2 到 sqrt(這個數),如果能被整除, 則表明此數不是素數,反之則是素數

2.3 代碼

/**
 * @ClassName : Twelve
 * @Author : cunyu1943
 * @Date : 2020/6/19 17:19
 * @Version : 1.0
 * @Description : 實例 12
 **/

public class Twelve {
    public static void main(String[] args) throws Exception {
        int count = 0;
        for (int i = 101; i < 200; i++) {
            // 設置標誌位,true 則是素數,false 則不是
            boolean flag = true;
            for (int j = 2; j <= (int) Math.sqrt(i); j++) {
                if (i % j == 0) {
                    flag = false;
                }
            }
            // 根據標誌位進行輸出
            if (flag == true) {
                System.out.print(i + "\t");
                count += 1;
                // 每行輸出 5 個就換行
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }
    }
}

2.4 結果

101	103	107	109	113	
127	131	137	139	149	
151	157	163	167	173	
179	181	191	193	197	
199	

3. 實例 13

3.1 題目

打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數 本身。例如:153是一個"水仙花數",因爲153=1的三次方+5的三次方+3的三次方。

3.2 思路

遍歷所有三位數,將每個數分解出個位、十位、百位,然後判斷是否滿足水仙花數,滿足就輸出

3.3 代碼

/**
 * @ClassName : Thirteen
 * @Author : cunyu1943
 * @Date : 2020/6/19 17:32
 * @Version : 1.0
 * @Description : 實例 13
 **/

public class Thirteen {
    public static void main(String[] args) throws Exception {
        int digit = 0;
        int decade = 0;
        int unit = 0;
        System.out.println("水仙花數如下:");
        // 遍歷三位數
        for (int i = 100; i < 1000; i++) {
            // 分別計算個位、十位、百位
            digit = i / 100;
            decade = i / 10 % 10;
            unit = i % 10;
            // 若滿足水仙花數條件則輸出
            if (i == (digit * digit * digit + unit * unit * unit + decade * decade * decade)) {
                System.out.println(i);
            }
        }
    }
}

3.4 結果

水仙花數如下:
153
370
371
407

4. 實例 14

4.1 題目

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

4.2 思路

對於要分解的正整數 n,先找出一個最小的質數 k,

  1. 若該質數恰好等於 n,,則說明分解過程結束,打印輸出就可以了
  2. 若 n 能被 k 整除,則打印 k 的值,同時 n=n/kn = n / k,然後重複執行這一步
  3. 若 n 不能被 k 整除,則 k=k+1k = k + 1,重複執行 (1)

4.3 代碼

import java.util.Scanner;

/**
 * @ClassName : Fourteen
 * @Author : cunyu1943
 * @Date : 2020/6/20 8:39
 * @Version : 1.0
 * @Description : 實例 14
 **/

public class Fourteen {
    public static void main(String[] args) throws Exception {
        Scanner inputs = new Scanner(System.in);
        System.out.println("輸入要分解的數:");
        int num = inputs.nextInt();

        System.out.print(num + " = ");
        for (int i = 2; i <= num; i++) {
            // 若 num 能被 i 整除,則打印 i,同時將 num 除以 i 的商,作爲新的正整數 num
            while (num % i == 0) {
                System.out.print(i + "");
                num /= i;
                if (num != 1) {
                    System.out.print(" * ");
                }
            }
        }
    }
}

4.4 結果

輸入要分解的數:
34
34 = 2 * 17

5. 實例 15

5.1 題目

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

5.2 思路

直接利用條件運算符嵌套判斷打印輸出即可

5.3 代碼

import java.util.Scanner;

/**
 * @ClassName : Fifteen
 * @Author : cunyu1943
 * @Date : 2020/6/20 9:01
 * @Version : 1.0
 * @Description : 實例 15
 **/

public class Fifteen {
    public static void main(String[] args) throws Exception {
        Scanner input = new Scanner(System.in);

        System.out.println("輸入成績:");
        int score = input.nextInt();

        // 利用條件語句進行判斷
        if (score >= 90) {
            System.out.println("A");
        } else if (score >= 60 && score < 90) {
            System.out.println("B");
        } else {
            System.out.println("C");
        }
    }
}

5.4 結果

輸入成績:
78
B

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章