那些年,我們一起做過的 Java 課後練習題(1 - 5)

村雨遙發表於2022-04-14
本文已同步至:村雨遙

例項 1

題目

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

分析

其實這就是個典型的斐波拉契數列問題:

第 1 個月:1 對兔子

第 2 個月:1 對兔子

第 3 個月:2 對兔子

第 4 個月:3 對兔子

……

即從第 3 個月開始,當前月的兔子對數是當前月前兩個月的兔子對數之和。

實現

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公眾號 : 村雨遙
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/1 13:13
 * @project : Java 程式設計例項
 * @package : PACKAGE_NAME
 * @className : Example1
 * @description :
 */

public class Example1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int month = 0;
        System.out.println("輸入月份");
        month = scanner.nextInt();

        int former = 1;
        int latter = 1;
        for (int i = 1; i <= month; i++) {
//            第 1、2 個月的情況
            if (i < 3) {
                latter = 1;
            } else {
                int tmp = latter;
                latter += former;
                former = tmp;
            }
            System.out.format("第 %d 個月的兔子對數:%d\n", i, latter);
        }
    }
}

結果

例項 2

題目

判斷 100 - 200 之間的素數的個數並輸出。

分析

判斷一個數是否為素數,只要用這個數分別取除 2 ~ sqrt(這個數),一旦被整除,則表明這個數不是素數,否則就是素數。

實現

/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公眾號 : 村雨遙
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/1 13:30
 * @project : Java 程式設計例項
 * @package : PACKAGE_NAME
 * @className : Example2
 * @description :
 */

public class Example2 {
    public static void main(String[] args) {
//        素數個數
        int count = 0;
        System.out.println("100 ~ 200 之間的素數:");
        for (int i = 100; i <= 200; i++) {
//            預設非素數
            boolean isPrime = false;
            for (int j = 2; j <= (int) Math.sqrt(i); j++) {
//                一旦能除盡,則說明不是素數,直接跳出迴圈
                if (i % j == 0) {
                    isPrime = true;
                    break;
                }
            }
//            如果是素數,則素數個數 + 1,然後列印出該素數
            if (isPrime == false) {
                count++;
                System.out.print(i + "\t");
//                每行列印 5 個素數,
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }

        System.out.println("\n素數總個數:" + count);
    }
}

結果

例項 3

題目

列印出所有“水仙花數”,所謂水仙花數,是指有一個三位數,其各個數字的立方和等於其本身,例如:$153=1*1*1+5*5*5+3*3*3$,所以 153 是水仙花數。

分析

因為水仙花數是一個三位數,所以它的範圍是 100 ~ 999,然後分別求出這個三位數的個位、十位、百位,最後判斷他們各自立方的和是否等於該三位數即可。

實現

/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公眾號 : 村雨遙
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/1 13:53
 * @project : Java 程式設計例項
 * @package : PACKAGE_NAME
 * @className : Example3
 * @description :
 */

public class Example3 {
    public static void main(String[] args) {
        System.out.println("水仙花數:");
        for (int i = 100; i < 1000; i++) {
//            個位
            int one = i % 10;
//            十位
            int ten = i % 100 / 10;
//            百位
            int hundred = i / 100;
//            計數
            int count = 0;
            if (one * one * one + ten * ten * ten + hundred * hundred * hundred == i) {
                count++;
//                列印水仙花數,每 5 個換行輸出
                System.out.print(i + "\t");
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }
    }
}

結果

例項 4

題目

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

分析

要對一個數 num 進行分解質因數,則應先找一個最小的質數 prime,接著按如下步驟進行:

  1. 若該質數敲好為 num,則說明分解質因數完成,列印即可;
  2. 若 prime != num,但 num 能被 prime 整除,則列印 prime,然後用 num 除以 prime 的商作為新的正整數 prime,重複第一步;
  3. 若 num 不能被 prime 整除,則用 prime + 1 代替 prime,重複執行第一步;

實現

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公眾號 : 村雨遙
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/1 14:12
 * @project : Java 程式設計例項
 * @package : PACKAGE_NAME
 * @className : Example4
 * @description :
 */

public class Example4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入一個數");
        int num = scanner.nextInt();
        System.out.print(num + " = ");
//        最小的質因數
        int prime = 2;
        while (prime <= num) {
//            num == prime,直接列印
            if (num == prime) {
                System.out.println(num);
                break;
//                能除盡時
            } else if (num % prime == 0) {
                System.out.print(prime + " * ");
                num = num / prime;
            } else {
//                除不盡時
                prime = prime + 1;
            }
        }
    }
}

結果

例項 5

題目

利用條件運算子的巢狀來完成:學習成績 >= 90 分的同學用 A 表示,60 - 89 分之間的用 B 表示,60 分以下的用 C 表示;

分析

直接用三元計算符即可;

實現

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公眾號 : 村雨遙
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/1 22:10
 * @project : Java 程式設計例項
 * @package : PACKAGE_NAME
 * @className : Example5
 * @description :
 */

public class Example5 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入成績");
        int score = scanner.nextInt();
        char grade;
        grade = score >= 90 ? 'A' : score >= 60 ? 'B' : 'C';
        System.out.println("等級為:" + grade);
    }
}

結果

相關文章