问题描述
- 小白求大神帮忙分析代码。因为刚学没多久,辛苦各位啦!
-
题目:古典问题:有一对兔子,从出生后第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); } } }
解决方案
24不是固定的,就是足够容纳就够了
http://blog.csdn.net/duxinfeng2010/article/details/7770354
http://blog.csdn.net/cai5/article/details/10021399
解决方案二:
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();
效果图如下:
时间: 2024-09-30 19:56:54