需求
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子假如兔子都不死,问第n个月的兔子对数为多少?
问题分析
第1个月 1 第2个月 1 第3个月 2 第4个月 3 第5个月 5 第6个月 8 第7个月 13 第8个月 21 第9个月 34 第10个月 55 ...... 从中找出规律:从第三个月开始,前两个月兔子数之后为第三个兔子总数
预想效果
输入0月份时,输出错误
请输入需要查询的月份:0 月份输入错误!
输入1月份时,输出1对
请输入需要查询的月份:1 第1个月的兔子对数为:1对
输入2月份时,输出1对
请输入需要查询的月份:2 第2个月的兔子对数为:1对
输入10月份时,输出55对
请输入需要查询的月份:10 第10个月的兔子对数为:55对
输入20月份时,输出6765对
请输入需要查询的月份:20 第20个月的兔子对数为:6765对
代码实现
//包名 package top.gaojc.test; //导包 import java.util.Scanner; //声明一个类名为Rabbit的类 public class Rabbit { // mian方法 程序入口 public static void main(String[] args) { /*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子 假如兔子都不死,问第n个月的兔子对数为多少?*/ /*问题分析 第一个月 1 第二个月 1 第三个月 2 第四个月 3 第五个月 5 第六个月 8 第七个月 13 第八个月 21 第九个月 34 ...... 从中找出规律:从第三个月开始,前两个月兔子数之后为第三个兔子总数 */ //键盘录入 Scanner sc = new Scanner(System.in); System.out.print("请输入需要查询的月份:"); //获取键盘录入值 月份 int month = sc.nextInt(); //定义兔子总对数 int rabbitSum = 0; //定义上个月的兔子个数 也就是2月兔子的个数 下面会用for循环相加 兔子总对数=上个月兔子对数+上上月兔子对数 int rabbitOne = 1; //定义上上个月的兔子个数 也就是1月兔子的个数 int rabbitTwo = 1; //如果输入的月份为1或者2 那么兔子的对数都是1 if (month == 1 || month == 2) { rabbitSum = 1; // 打印输出 System.out.println("第" + month + "个月的兔子对数为:" + rabbitSum + "对"); } else if (month < 1) { // 如果月份小于1 输出月份输入错误 System.out.println("月份输入错误!"); } else { //使用for循环 i是月份 从三月开始累加 循环到最后i等于输入的月份 月份++ 3 4 5 6... for (int i = 3; i <= month; i++) { //兔子总对数=上个月兔子对数+上上月兔子对数 //这个总对数(三月兔子的总对数)=第一个月+第二个月 rabbitSum = rabbitOne + rabbitTwo; /* for循环 月份++操作 也是说这轮循环结束之后 下轮循环中上个月的兔子对数就是这个月总的兔子对数 下轮循环中上上个月的兔子对数就是本次循环中上个月的兔子对数*/ //上个月的对数赋值给上上个月 rabbitTwo = rabbitOne; //总数赋值给上个月 rabbitOne = rabbitSum; } // 打印输出 System.out.println("第" + month + "个月的兔子对数为:" + rabbitSum + "对"); } } }