飞道的博客

Java 实现 C 语言经典 100 例(11 - 15)

393人阅读  评论(0)

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 = 2 3 3 5 90=2 * 3 * 3* 5

4.2 思路

对于要分解的正整数 n,先找出一个最小的质数 k,

  1. 若该质数恰好等于 n,,则说明分解过程结束,打印输出就可以了
  2. 若 n 能被 k 整除,则打印 k 的值,同时 n = n / k n = n / k ,然后重复执行这一步
  3. 若 n 不能被 k 整除,则 k = k + 1 k = 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


转载:https://blog.csdn.net/github_39655029/article/details/106869168
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场