那些年,我们一起做过的 Java 课后练习题(6 - 10)

简介: 那些年,我们一起做过的 Java 课后练习题(6 - 10)

实例 6

题目

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


分析

在循环中,只要除数不等于 0,用较大数除以较小的数,将较小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环的较小的数,如此循环知道较小的数的值为 0,返回较大的数,此数极为最大公约数,最小公倍数为两数之积除以最大公约数。


实现


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:23
 * @project : Java 编程实例
 * @package : PACKAGE_NAME
 * @className : Example6
 * @description :
 */
public class Example6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入 m, n");
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int divisor = maxCommonDivisor(m, n);
        int multiple = m * n / maxCommonDivisor(m, n);
        System.out.println("最大公约数: " + divisor);
        System.out.println("最小公倍数: " + multiple);
    }
    public static int maxCommonDivisor(int a, int b) {
        int max, min;
        max = (a > b) ? a : b;
        min = (a < b) ? a : b;
        if (max % min != 0) {
            return maxCommonDivisor(min, max % min);
        } else {
            return min;
        }
    }
}

image.png

实例 7

题目

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

分析

遍历字符串,然后看每个字符属于的类别,分别计数;

实现

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 23:04
 * @project : Java 编程实例
 * @package : PACKAGE_NAME
 * @className : Example7
 * @description :
 */
public class Example7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入字符串");
        String str = scanner.nextLine();
        int character = 0;
        int digit = 0;
        int blank = 0;
        int others = 0;
//        遍历字符串,然后统计其中的字符
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (ch == ' ') {
                blank++;
            } else if (ch >= '0' && ch <= '9') {
                digit++;
            } else if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') {
                character++;
            } else {
                others++;
            }
        }
        System.out.println("空格数:" + blank);
        System.out.println("英文字母数:" + character);
        System.out.println("数字数:" + digit);
        System.out.println("其他字符数:" + others);
    }
}

image.png实例 8

题目

求 s = a + a a + a a a + … + a a … a s = a + aa + aaa + … + aa…as=a+aa+aaa+…+aa…a 的值,其中 a aa 是一个数字,如 2 + 22 + 222 + … + 22…2


分析

首先是分别输入 a aa 和次数 count 的值,然后循环得到最大的数,每次进行累加求和,然后向前移动一位。


实现


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/2 16:25
 * @project : Java 编程实例
 * @package : PACKAGE_NAME
 * @className : Example8
 * @description :
 */
public class Example8 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入次数");
        int count = scanner.nextInt();
        System.out.println("输入 a");
        int a = scanner.nextInt();
        int sum = 0;
        int i = 0;
        // 缓存尾数
        int tmp = 0;
        while (i < count) {
            tmp += a;
            sum += tmp;
            a *= 10;
            i++;
        }
        System.out.println("最终和:" + sum);
    }
}

image.png实例 9

题目

一个数如果恰好等于它的因子之和,那么这个数就叫做 “完数”,如 6 = 1 + 2 + 3,编程找出 1000 之内的所有完数。


分析

求 num 的各个因子,然后用一个变量 sum 来计算一个数 num 的因子之和,最后判断 sum 和 num 是否相等,若相等则说明该数是一个完数,若不相等则说明不是。


实现


/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公众号 : 村雨遥
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/2 16:36
 * @project : Java 编程实例
 * @package : PACKAGE_NAME
 * @className : Example9
 * @description :
 */
public class Example9 {
    public static void main(String[] args) {
        System.out.println("1000 以内的完数:");
        int count = 0;
        for (int i = 1; i <= 1000; i++) {
            if (check(i)) {
                count++;
                System.out.print(i + "\t");
            }
        }
        System.out.println("\n1000 以内的完数个数:" + count);
    }
    /**
     * 判断一个数是否为完数
     *
     * @param num
     * @return true 完数;false 非完数
     */
    public static boolean check(int num) {
        int sum = 0;
//        求 num 的各个因子并求和
        for (int i = 1; i < num; i++) {
            if (num % i == 0) {
                sum += i;
            }
        }
//        判断各个因子之和是否等于该数
        if (sum == num) {
            return true;
        }
        return false;
    }
}

image.png实例 10

题目

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


分析

第一次下落的路程和下落高度均为 100 m,然后循环后续 9 次,每次下落的高度是上一次下落高度的一般,而经过的路程则为之前经过的路程之和加上本次下落的高度。


实现


/**
 * Created with IntelliJ IDEA.
 *
 * @author : cunyu
 * @version : 1.0
 * @email : 747731461@qq.com
 * @公众号 : 村雨遥
 * @website : https://cunyu1943.github.io
 * @date : 2021/6/2 16:46
 * @project : Java 编程实例
 * @package : PACKAGE_NAME
 * @className : Example10
 * @description :
 */
public class Example10 {
    public static void main(String[] args) {
        double height = 100.0d;
        double sum = 100.0d;
        for (int i = 1; i < 10; i++) {
//            经过的路程等于之前路程加上当前次下落高度
            sum += height;
//            当前次下落高度为上一次的一半
            height /= 2;
        }
        System.out.println("第 10 次反弹高度:" + height / 2);
        System.out.println("10 次共经过路程:" + sum);
    }
}

image.png

目录
相关文章
|
21天前
|
JavaScript Java 测试技术
基于Java的中学生课后服务的信息管理与推荐的设计与实现(源码+lw+部署文档+讲解等)
基于Java的中学生课后服务的信息管理与推荐的设计与实现(源码+lw+部署文档+讲解等)
27 2
|
存储 Java 关系型数据库
Java实用教程第五版课后习题
1.Person.java。 2.两个字节码,分别是Person.class和Xiti.class。 3.得到“找不到 main 方法” 得到&quot;无法加载主类 xiti&quot; 得到“无法加载主类 xiti.class” 得到“您好,很高兴认识您 nice to meet you”
277 0
Java实用教程第五版课后习题
Java课后练习 对应冒泡排序、直接选择排序、直接插入排序进行选择调用,手动输入一组数字(空格隔开)转为数组 最后排序前后结果
Java课后练习 对应冒泡排序、直接选择排序、直接插入排序进行选择调用,手动输入一组数字(空格隔开)转为数组 最后排序前后结果
Java课后练习 对应冒泡排序、直接选择排序、直接插入排序进行选择调用,手动输入一组数字(空格隔开)转为数组 最后排序前后结果
|
机器学习/深度学习 Java
那些年,我们一起做过的 Java 课后练习题(66 - 70)
那些年,我们一起做过的 Java 课后练习题(66 - 70)
74 0
那些年,我们一起做过的 Java 课后练习题(66 - 70)
|
Java
那些年,我们一起做过的 Java 课后练习题(61 - 65)
那些年,我们一起做过的 Java 课后练习题(61 - 65)
72 0
那些年,我们一起做过的 Java 课后练习题(61 - 65)
|
Java 知识图谱
那些年,我们一起做过的 Java 课后练习题(56 - 60)
那些年,我们一起做过的 Java 课后练习题(56 - 60)
101 0
那些年,我们一起做过的 Java 课后练习题(56 - 60)
|
Java
那些年,我们一起做过的 Java 课后练习题(51 - 55)
那些年,我们一起做过的 Java 课后练习题(51 - 55)
106 0
那些年,我们一起做过的 Java 课后练习题(51 - 55)
|
23小时前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
|
23小时前
|
安全 Java
【JAVA进阶篇教学】第六篇:Java线程中状态
【JAVA进阶篇教学】第六篇:Java线程中状态
|
23小时前
|
缓存 Java
【JAVA进阶篇教学】第五篇:Java多线程编程
【JAVA进阶篇教学】第五篇:Java多线程编程