int main(void)
{
int n,i,a,b,c
a=0
b=1
i=1
printf("请输入兔子对数n=")
scanf("%d",&n)
while(b<n){
c=a+b /*while里面一次循环是1个月*/
a=b
b=c
i++
}
printf("至少%d月",i)
return 0
}
思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是
long fun(int month){
if(month == 1 || month == 2)
return 1
else
return fun(month - 1) + fun(month -2)
}
// ConsoleApplication1.cpp : 定义控制台应用程序的入口点。
int main()
{
int Mon
long Num
scanf("%d",&Mon)
Num = fun(Mon)
printf("第%d月共有兔子%ld只\n",Mon,Num)
return 0
}
至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)