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

该博客围绕Java编程给出多个实例。包括斐波拉契数列问题,计算第10个月兔子对数;判断100 - 200间素数个数;打印水仙花数;将正整数分解质因数;用条件运算符嵌套表示成绩等级。每个实例都有题目、分析、实现和结果。

实例 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∗3153=1*1*1+5*5*5+3*3*3153=111+555+333,所以 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);
    }
}

结果

根据原作 https://pan.quark.cn/s/459657bcfd45 的源码改编 Classic-ML-Methods-Algo 引言 建立这个项目,是为了梳理和总结传统机器学习(Machine Learning)方法(methods)或者算法(algo),和各位同仁相互学习交流. 现在的深度学习本质上来自于传统的神经网络模型,很大程度上是传统机器学习的延续,同时也在不少时候需要结合传统方法来实现. 任何机器学习方法基本的流程结构都是通用的;使用的评价方法也基本通用;使用的一些数学知识也是通用的. 本文在梳理传统机器学习方法算法的同时也会顺便补充这些流程,数学上的知识以供参考. 机器学习 机器学习是人工智能(Artificial Intelligence)的一个分支,也是实现人工智能最重要的手段.区别于传统的基于规则(rule-based)的算法,机器学习可以从数据中获取知识,从而实现规定的任务[Ian Goodfellow and Yoshua Bengio and Aaron Courville的Deep Learning].这些知识可以分为四种: 总结(summarization) 预测(prediction) 估计(estimation) 假想验证(hypothesis testing) 机器学习主要关心的是预测[Varian在Big Data : New Tricks for Econometrics],预测的可以是连续性的输出变量,分类,聚类或者物品之间的有趣关联. 机器学习分类 根据数据配置(setting,是否有标签,可以是连续的也可以是离散的)和任务目标,我们可以将机器学习方法分为四种: 无监督(unsupervised) 训练数据没有给定...
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

村雨遥

众筹一毛买键盘!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值