牛客网刷题
【题目】:有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
【解题分析】:,该题可采用递推算法来表示。想象一下数字电路中的寄存器模型,3个月其实刚好对应三级移位寄存器,那么定义3个变量记录每级寄存器的值,然后累加就好了。
【代码及分析】:
#include <iostream>
using namespace std;
int main()
{
int n = 0;
while(cin >> n)
{
int last1 = 1; //上月兔子数量
int last2 = 0; //前一个月的兔子数量
int f =0; //当月兔子数量
for(int i = 1; i < n; i++) {
f = last2 + last1 ;//一级流水线,当月兔子数量 = 上上月的兔子数 + 上个月的兔子数
last2 = last1 ; //二级流水线,记录上一个月的最新兔子数,那么下次循环就可以获取前一个月的数据了
last1 = f; //三级流水线,记录当月最新兔子数,那么下次循环就可以获取上个月的数据了
}
cout << f << endl;
}
return 0;
}
【总结】:这个算法比较简单,主要采用递推算法,该代码也已能自主写下并正确运行。