小白求大神帮忙分析代码。因为刚学没多久,辛苦各位啦!

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题
public class lianxi01 {
public static void main(String[] args) {
System.out.println("第1个月的兔子对数: 1");
System.out.println("第2个月的兔子对数: 1");
int f1 = 1, f2 = 1, f, M=24; //f,m=24,这个是什么意思啊?为什么要设置等于24?
for(int i=3; i<=M; i++) { //这一段循环体又是什么意思呢?
f = f2;
f2 = f1 + f2;

f1 = f;
System.out.println("第" + i +"个月的兔子对数: "+f2); } } }

3个回答

24不是固定的,是多少个月可大可小。
f1是下个月出生的兔子对数。
f2是这个月的兔子对数。
f是一个替换变量,保证在这个月下个月生出的兔子对数是上个月的兔子总数。在f2值还没有变化的时候就复制给f,在变化后在将值变化给f1.下次循环的时候好计算这个月的兔子总对数。

        int Moner = 27;//计算多少月内的每月兔子数量
        int OleNum = 1;//初始的第一对兔子
        int NewNum = OleNum;
        //循环计算每月兔子数量
        for (int i = 1; i <= Moner; i++)
        {
            if (i % 3 == 0)//能整除3的月份就是兔子生小兔子的月份(3,6,9,12...月)
            {
                /*第一对兔子在3月生了一对小兔子。
                 * 6月,第一对兔子在 3月时生的兔子 生了一对小兔子,
                 * 其本身也生了一对小兔子(即:6月有4对兔子)
                 */
                NewNum = OleNum * 2;
                OleNum = NewNum;
            }
            Console.WriteLine("第{0}个月,有{1}对兔子", i, OleNum);
        }
        Console.ReadKey();

效果图如下:

图片说明

jiangufocf
Joke_k 没看到 ‘每个月’。。。
4 年多之前 回复
luke003
luke003 因为第四个月,老兔子还在生,第三个月开始每月生一对的啊。第五个月 老兔子和第三个月生的那一对兔子也开始生了一对,所以第五个月一共新增了2对加上四月的那3对,是 5对
4 年多之前 回复
luke003
luke003 回复jiangufocf: 你的逻辑好像不对的吧?第一第二个月都是1对,第三个月是2对,第四个月四3对 第五个月是5对
4 年多之前 回复
luke003
luke003 回复jiangufocf: 你的逻辑好像不对的吧?第一第二个月都是1对,第三个月是2对,第四个月四3对 第五个月是5对
4 年多之前 回复
jiangufocf
Joke_k 编写语言:C#
4 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐