Java 實現 C 語言經典 100 例(1 - 5)

1. 實例 1

1.1 題目

有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?

1.2 思路

填在各位上的數字都可以是 1、2、3、4,但是隻要滿足各位上的數不相同,就可以當成一個組成的數。

1.3 代碼

/**
 * @ClassName : One
 * @Author : cunyu1943
 * @Date : 2020/6/18 11:17
 * @Version : 1.0
 * @Description : 實例 1
 **/

public class One {
    public static void main(String[] args) throws Exception {
        // 用於計數
        int count = 0;

        System.out.println("組成的數:");
        // 設置三重循環,對每位上的數進行賦值
        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                for (int k = 1; k < 5; k++) {
                    // 將不滿足條件的排列去掉
                    if (i != j && i != k && k != j) {
                        // 滿足條件則計數 + 1
                        count = count + 1;
                        System.out.print("" + (i * 100 + j * 10 + k)+"\t");
                        // 每輸出 5 個則換行輸出
                        if (count % 5 ==0){
                            System.out.println();
                        }
                    }
                }

            }
        }

        System.out.println("\n滿足條件的數有:" + count + " 個");
    }
}

1.4 結果

組成的數:
123	124	132	134	142	
143	213	214	231	234	
241	243	312	314	321	
324	341	342	412	413	
421	423	431	432	
滿足條件的數有:24 個

2. 實例 2

2.1 題目

企業發放的獎金根據利潤提成。

  • 利潤(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%提成。

從鍵盤輸入當月利潤,求應發放獎金總數?

2.2 思路

可以將利潤利用各個閾值進行分界,先將各個臨界點的獎金算出來,然後再對各區間進行處理

2.3 代碼

import java.util.Scanner;

/**
 * @ClassName : Two
 * @Author : cunyu1943
 * @Date : 2020/6/18 11:44
 * @Version : 1.0
 * @Description : 實例 2
 **/

public class Two {
    public static void main(String[] args) throws Exception {
        // 最終獎金
        double bonus = 0.0;
        System.out.println("輸入利潤:");
        Scanner input = new Scanner(System.in);
        // 利潤
        long profit = input.nextLong();
        // 將各個臨界點的獎金算出來
        double baseBonus = 100000 * 0.1;
        double bonus1 = baseBonus + 100000 * 0.075;
        double bonus2 = bonus1 + 200000 * 0.05;
        double bonus3 = bonus2 + 200000 * 0.03;
        double bonus4 = bonus3 + 400000 * 0.015;


        if (profit <= 100000) {
            // 利潤低於或等於10萬元時
            bonus = profit * 0.1;
        } else if (profit <= 200000) {
            // 利潤高於10萬元,低於20萬元時
            bonus = baseBonus + (profit - 100000) * 0.075;
        } else if (profit <= 400000) {
            // 20萬到40萬之間時
            bonus = bonus1 + 0.05 * (profit - 200000);
        } else if (profit <= 600000) {
            // 40萬到60萬時
            bonus = bonus2 + (profit - 400000) * 0.03;
        } else if (profit <= 1000000) {
            // 60萬到100萬之間時
            bonus = bonus3 + (profit - 600000) * 0.015;
        } else if (profit > 1000000) {
            // 高於100萬元時
            bonus = bonus4 + (profit - 1000000) * 0.01;
        }

        System.out.println("當月獎金爲:" + bonus);
    }
}

2.4 結果

輸入利潤:
120000
當月獎金爲:11500.0

3. 實例 3

3.1 題目

一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?

3.2 思路

完全平方數:若一個數能表示成某個正數的平方的形式,則說該數是一個完全平方數

  1. 假設該數是 xx,則有 x+100=m2x+100+168=n2x + 100 = m^2,x + 100 + 168 = n^2
  2. 從而 m2+168=n2m^2 + 168 = n^2(n - m)(n + m) = 168,則說明 nmn-m 或者 n+mn + m 其中必有一個偶數
  3. i=n+m,j=nmi = n + m,j = n - m,則 m=(i+j)/2,n=(ij)/2m = (i + j)/2,n=(i - j)/2,說明 i,ji,j 均爲偶數,或者均爲奇數
  4. 由 2 和 3,可以得出 i,ji,j 兩者均爲偶數
  5. ij=168,j>=2i * j = 168,j >= 2,則 1<i<168/2+11 < i < 168 / 2 + 1

3.3 代碼

/**
 * @ClassName : Three
 * @Author : cunyu1943
 * @Date : 2020/6/18 13:40
 * @Version : 1.0
 * @Description : 實例 3
 **/

public class Three {
    public static void main(String[] args) throws Exception {
        // 最終結果
        int result = 0;

        System.out.println("最終結果可能的值:");
        for (int i = 2; i < (168 / 2 + 1); i++) {
            // i,j 爲偶數,i * j = 168
            if (168 % i == 0) {
                int j = 168 / i;
                // i = n + m,j = n - m,且 i, j 均爲偶數,偶數之和/差仍爲偶數
                if (i > j && (i + j) % 2 == 0 && (i - j) % 2 == 0) {
                    int n = (i + j) / 2;
                    int m = (i - j) / 2;
                    result = m * m - 100;
                    System.out.println("" + result);
                }
            }
        }

    }
}

3.4 結果

最終結果可能的值:
-99
21
261
1581

4. 實例 4

4.1 題目

輸入某年某月某日,判斷這一天是這一年的第幾天?

4.2 思路

同實例 2 類似,先以平年爲基準將各個臨界點的值事先算出來,然後再做後續處理,針對特殊情況閏年,則當月份大於 2 時,在平年的基礎上加 1 即可

4.3 代碼

import java.util.Scanner;

/**
 * @ClassName : Four
 * @Author : cunyu1943
 * @Date : 2020/6/18 14:29
 * @Version : 1.0
 * @Description : 實例 4
 **/

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

        System.out.println("分別輸入年月日,輸入一個值則回車一次");
        int year = input.nextInt();
        int month = input.nextInt();
        int day = input.nextInt();

        // 某年的第幾天
        int sum = 0;

        // 先以平年爲基準
        switch (month) {
            case 1:
                sum = 0;
                break;
            case 2:
                sum = 31;
                break;
            case 3:
                sum = 59;
                break;
            case 4:
                sum = 90;
                break;
            case 5:
                sum = 120;
                break;
            case 6:
                sum = 151;
                break;
            case 7:
                sum = 181;
                break;
            case 8:
                sum = 212;
                break;
            case 9:
                sum = 243;
                break;
            case 10:
                sum = 273;
                break;
            case 11:
                sum = 304;
                break;
            case 12:
                sum = 334;
                break;
            default:
                break;
        }

        // 判別閏平年
        boolean leap = false;

        if (year % 400 == 0 || (year % 4 == 0 & year % 100 != 0)) {
            leap = true;
        }
        // 某月之前的天數加上當月的天數
        sum = sum + day;

        // 是閏年且月份大於 2 則在平年的基礎上 + 1
        if (leap == true && month > 2) {
            sum = sum + 1;
        }

        System.out.println("輸入的日期是該年的第 " + sum + " 天!");
    }
}

4.4 結果

分別輸入年月日,輸入一個值則回車一次
2020
6
18
輸入的日期是該年的第 170 天!

5. 實例 5

5.1 題目

輸入三個整數x,y,z,請把這三個數由小到大輸出。

5.2 思路

  1. 先將三個整數存放在數組中
  2. 對數組進行從小到大排序
  3. 輸出排序後的數組即可

5.3 代碼

import java.util.Arrays;
import java.util.Scanner;

/**
 * @ClassName : Five
 * @Author : cunyu1943
 * @Date : 2020/6/18 14:46
 * @Version : 1.0
 * @Description : 實例 5
 **/

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

        // 用於存放輸入的 3 個數
        int[] array = new int[3];
        System.out.println("輸入三個數,每輸入一個回車一次:");
        for (int i = 0; i < 3; i++) {
            array[i] = input.nextInt();
        }

        // 對數組排序輸出
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = 0; j < array.length - 1 - i; j++) {
                // 前後比較,將大的放在後邊
                if (array[j] > array[j + 1]) {
                    int tmp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = tmp;
                }
            }
        }

        // 打印排序後的數組
        System.out.println("三個數從小到大:");
        for (int item : array
        ) {
            System.out.print(item + "\t");
        }
    }
}

5.4 結果

輸入三個數,每輸入一個回車一次:
43
54
2
三個數從小到大:
2	43	54	

建議關注公衆號 村雨遙,文章會優先發布在此處,此外還有 超多精品資源 等着你。

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