1.5 兔子产子问题

发布时间 2023-04-20 16:36:32作者: 自律小子丶

问题描述:有一对兔子,从出生后的第 3 个月起每个月都生一对兔子。
小兔子长到第 3 个月后每个月又生一对兔子,假设所有的兔子都不死,问 30 个月内每个月的兔子总数为多少?

第一部曲:

 小兔子不满一个月,中兔子满一个月不满两个月,老兔子满三个月以上。写出表格后发现1,1,2,3,5,8,13......满足斐波那契数列。可以使用迭代或者递归来实现。

第二部曲:

 第三部曲:

提前对前两项赋值

for(int i=3;i<=30;i++)//for循环判断
{
fib=fib1+fib2;//求出通项公式
printf("%12d",fib);
fib2=fib1;//对前两项重新赋值
fib1=fib;
if(i%4==0)//每四个一行
printf("\n");
}

第四部曲:

#include<iostream>
using namespace std;
int main()
{
int fib1=1,fib2=1,fib;
printf("%12d %12d",fib1,fib2);
for(int i=3;i<=30;i++)
{
fib=fib1+fib2;
printf("%12d",fib);
fib2=fib1;
fib1=fib;
if(i%4==0)
printf("\n");
}
return 0;
}

 优化代码:

#include<iostream>
using namespace std;
int main()
{
int fib1=1,fib2=1,fib;

for(int i=1;i<=15;i++)
{
printf("%12d %12d",fib1,fib2);
if(i%2==0)
printf("\n");
fib1=fib1+fib2;
fib2=fib1+fib2;
}
return 0;
}

用两个变量,减少了变量的个数,fib2是最新一个月,fib1是之前一个月;