7-27 兔子繁衍问题 (15 分)
题目
7-27 兔子繁衍问题 (15 分)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
结尾无空行
输出样例:
9
结尾无空行
解题思路
分析
1.每三个月一循环,设置月份为i,由于直到第三个月才生第一对兔子,故设i初值为2(循环结束加1为3);
2.用数组储存未成熟兔子,下标可设做i%3
用于循环;
3.每个月的a[i%3]
是刚生产的兔子,a[(i+2)%3]
是刚成年的兔子(这一个月尚不生产);
4.考虑到N为1或者0,的情况,此时未运行循环体直接输出i=2,所以输出应判断i的取值,i == 2时,输出 i = 1;因为运行循环体后i至少为3。
总结
利用循环和递归来做都可,此处的循环也类似于递归的思想。
注意区分情况,N为1 or 0是特例。
代码
#include<stdio.h>
int main(){
int N;
scanf("%d",&N);
int a = 1;
//a为成年兔子数
int b[3] = {0};
int i = 1;
while(a + b[0] +b[1] +b[2] < N){
b[i%3] = a;
a += b[(i + 2) % 3];
b[(i + 2) % 3] = 0;
i++;
}
if(i<1){
printf("1");
}else{
printf("%d\n",i+2);
}
return 0;
}
疑难点以及一些测试数据
循环的处理,
N = 30
输出为 9
N = 1
输出为1