思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系f(n) = f(n - 1) + f(n - 2)。那么程序自然是
成都创新互联公司2013年至今,是专业互联网技术服务公司,拥有项目成都网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元甘井子做网站,已为上家服务,为甘井子各地企业和个人服务,联系电话:18980820575
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;
}
至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的
#includestdio.h
int main(void)
{
int n,i,a,b,c;
a=0;
b=1;
i=1;
printf("请输入兔子对数n=");
scanf("%d",n);
while(bn){
c=a+b; /*while里面一次循环是1个月*/
a=b;
b=c;
i++;
}
printf("至少%d月",i);
return 0;
}
double a[100];
printf("第%d个月的兔子为:%0.2f\n", n, a[n-1]);
改一下
根据题意,得出以下结果:
年份:0 0.5 1 1.5 2 2.5 3 3.5 4 ...
兔子:1 1 2 3 5 8 13 21 34...
序号: 0 1 2 3 4 5 6 7 8...
所以发现规律:除前两个外,后面的则是等于前两个的种即:A0=1,A2=1,An=A(n-1)+A(n-2)
这样程序就可以开始编制了
#include "stdio.h"
main()
{
int year,total,i,a1,a2;
printf("\n请输入多少年后:");
scanf("%d",year);
a1=1;
a2=1;
for(i=2;i2*year;i++)
{
if(i%2==1)
{
a1=a1+a2;
total=a1;
}else{
a2=a1+a2;
total=a2;
}
}
printf("\n第%d年末总共会有%d对兔子",year,total);
}
#includestdio.h
int main()
{
int a[50];
int i,t,n;
a[0]=1;
a[1]=1;
for(i=2;i50;i++)
a[i]=a[i-1]+a[i-2];
scanf("%d",t);
while(t--)
{
scanf("%d",n);
printf("%d\n",a[n]);
}
return 0;
}