前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 版 C 语言经典 100 例(16 - 20

Java 版 C 语言经典 100 例(16 - 20

作者头像
村雨遥
发布2020-06-28 12:07:19
5340
发布2020-06-28 12:07:19
举报
文章被收录于专栏:JavaParkJavaPark

1. 实例 16

1.1 题目

输入两个正整数 m 和 n,求其最大公约数和最小公倍数。

1.2 思路

  1. 最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数;
  2. 求最大公约数用辗转相除法(欧几里德算法)
  3. 两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为 GCD
  4. (设 且 )

1.3 代码

代码语言:javascript
复制
import java.util.Scanner;

/**
 * @ClassName : Sixteen
 * @Author : cunyu
 * @Date : 2020/6/22 14:03
 * @Version : 1.0
 * @Description : 实例 16
 **/

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

        System.out.println("输入两个数,每输入一个回车一次");
        int num1 = input.nextInt();
        int num2 = input.nextInt();

        // 找出两数中较大的数和较小的数
        int max = Math.max(num1, num2);
        int min = Math.min(num1, num2);

        // 两数余,乘积
        int remainder = max % min;
        int product = max * min;

        // 欧几里得算法,辗转相除
        while (remainder != 0) {
            max = min;
            min = remainder;
            remainder = max % min;
        }

        // 最小公倍数 = 两数乘积 / 最大公约数
        System.out.println("最大公约数:" + min);
        System.out.println("最小公倍数:" + product / min);

    }
}

1.4 结果

代码语言:javascript
复制
输入两个数,每输入一个回车一次
12 26
最小公倍数:156
最大公约数:2

2. 实例 17

2.1 题目

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

2.2 思路

利用循环语句,遍历字符串,对不同类别的字符计数

2.3 代码

代码语言:javascript
复制
import java.util.Scanner;

/**
 * @ClassName : Seventeen
 * @Author : cunyu
 * @Date : 2020/6/22 14:39
 * @Version : 1.0
 * @Description : 实例 17
 **/

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

        System.out.println("输入字符串,回车结束输入");
        String str = input.nextLine();

        // 用于计数不同类别字符
        int countChar = 0;
        int countSpace = 0;
        int countNum = 0;
        int countOther = 0;

        // 遍历字符串,对字符串中的字符进行归类计数
        for (int i = 0; i < str.length(); i++) {
            char cha = str.charAt(i);
            if ((cha >= 'a' && cha <= 'z') || (cha >= 'A' && cha <= 'Z')) {
                countChar++;
            } else if (cha >= '0' && cha <= '9') {
                countNum++;
            } else if (cha == ' ') {
                countSpace++;
            } else {
                countOther++;
            }
        }

        System.out.println("字母数:" + countChar);
        System.out.println("数字数:" + countNum);
        System.out.println("空格数:" + countSpace);
        System.out.println("其他:" + countOther);
    }
}

2.4 结果

代码语言:javascript
复制
输入字符串,回车结束输入
43255trewtertw4 tew 43 tew &#$
字母数:15
数字数:8
空格数:4
其他:3

3. 实例 18

3.1 题目

求 的值,其中 a 是一个数字。例如 (此时共有 5 个数相加),几个数相加有键盘控制。

3.2 思路

求和很简单,关键在于要算出其中每项的具体值

3.3 代码

代码语言:javascript
复制
import java.util.Scanner;

/**
 * @ClassName : Eighteen
 * @Author : cunyu
 * @Date : 2020/6/22 14:52
 * @Version : 1.0
 * @Description : 实例 18
 **/

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

        System.out.println("输入 a,n,每输入一个值换行");
        int a = input.nextInt();
        int n = input.nextInt();

        // 和
        long sum = 0;
        // 第一次循环 a 的初始值
        int tmp = a;

        for (int i = 0; i < n; i++) {
            sum += tmp;
            a = a * 10;
            // 下次循环 a 的值 = 当次循环 a * 10 的值+ 当次循环 a 的值
            tmp += a;
        }

        System.out.println("a + aa + aaa + ... 的和:" + sum);
    }
}

3.4 结果

代码语言:javascript
复制
输入 a,n,每输入一个值换行
2
5
a + aa + aaa + ... 的和:24690

4. 实例 19

4.1 题目

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如 6=1 + 2 + 3.编程找出 1000 以内的所有完数。

4.2 思路

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

  1. 若该质数恰好等于 n,,则说明分解过程结束,打印输出就可以了
  2. 若 n 能被 k 整除,则打印 k 的值,同时 ,然后重复执行这一步
  3. 若 n 不能被 k 整除,则 ,重复执行 (1)

4.3 代码

代码语言:javascript
复制
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName : Nineteen
 * @Author : cunyu
 * @Date : 2020/6/22 15:12
 * @Version : 1.0
 * @Description : 实例 19
 **/

public class Nineteen {
    public static void main(String[] args) throws Exception {
        final int SIZE = 1000;

        // 用于存储 1000 以内的完数
        List<Integer> numList = new ArrayList<>();

        // 用于存储每个数的因子
        int[] factorArr = new int[256];
        // 1 是每个数的因子
        factorArr[0] = 1;

        for (int i = 2; i < SIZE; i++) {
            int sum = factorArr[0];
            int k = 0;

            // 求除 1 外的因子,可以参考实例 14 中分解质因数
            for (int j = 2; j <= (i / 2); j++) {
                if (i % j == 0) {
                    sum += j;
                    factorArr[++k] = j;
                }
            }

            // 判断该数是否为完数
            if (sum == i) {
                numList.add(i);
            }
        }

        System.out.println("完数:");
        for (int i = 0; i < numList.size(); i++) {
            System.out.println(numList.get(i));
        }

    }
}

4.4 结果

代码语言:javascript
复制
完数:
6
28
496

5. 实例 20

5.1 题目

一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第 10 次落地时,共经过多少米?第 10 次反弹多高?

5.2 思路

直接看代码注释即可

5.3 代码

代码语言:javascript
复制
/**
 * @ClassName : Twenty
 * @Author : cunyu
 * @Date : 2020/6/22 15:41
 * @Version : 1.0
 * @Description : 实例 20
 **/

public class Twenty {
    public static void main(String[] args) throws Exception {
        // 初始高度 & 经过路程
        float height = 100.0f;
        float sum = 100.0f;

        // 第一次反弹高度
        height = height / 2;

        for (int i = 1; i < 10; i++) {
            // 总的经过路程 = 初始经过路程 + 2 * 每次反弹的高度
            sum = sum + 2 * height;
            // 每次反弹前一次高度的一半
            height /= 2;
        }

        System.out.println("总的经过:" + sum + " 米");
        System.out.println("第 10 次反弹 " + height + " 米");
    }
}

5.4 结果

代码语言:javascript
复制
总的经过:299.60938 米
第 10 次反弹 0.09765625 米

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 村雨遥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 实例 16
    • 1.1 题目
      • 1.2 思路
        • 1.3 代码
          • 1.4 结果
          • 2. 实例 17
            • 2.1 题目
              • 2.2 思路
                • 2.3 代码
                  • 2.4 结果
                  • 3. 实例 18
                    • 3.1 题目
                      • 3.2 思路
                        • 3.3 代码
                          • 3.4 结果
                          • 4. 实例 19
                            • 4.1 题目
                              • 4.2 思路
                                • 4.3 代码
                                  • 4.4 结果
                                  • 5. 实例 20
                                    • 5.1 题目
                                      • 5.2 思路
                                        • 5.3 代码
                                          • 5.4 结果
                                          领券
                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档