扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//兔子的对数,就是Fibonacci数列
公司主营业务:网站建设、网站制作、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联公司是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联公司推出石嘴山免费做网站回馈大家。
//1 1 2 3 5 8 13 21 34 55 89 ...
#include stdio.h
int f(int n)
{
if(n 3)
return 1;
else
return f(n - 2) + f(n - 1);
}
void main()
{
int n;
scanf("%d", n);
printf("%d年后,有兔子%d只.\n", n, f(n));
}
那个i用来实现循环累加
这个其实就是Fibonacci数列的应用。
f(1)=f(2)=1 (i=1或者i=2)
f(i)=f(i-1)+f(i-2) (i2)
附 几种求Fibonacci数列前20位的方法
#includestdio.h
int function(int n);
int main()
{
int i;
for(i=1;i=20;i++)
printf("%d ",function(i));
printf("\n");
return 0;
}
int function(int n)
{
if(n==1||n==2)return 1;
else return function(n-1)+function(n-2);
}
********************************************************************************
#includestdio.h
int main()
{
int i,a[20];
for(i=0;i20;i++)
{
if(i==0||i==1)a[i]=1;
else a[i]=a[i-1]+a[i-2];
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
********************************************************************************
#include stdio.h
int main()
{
int n;
int fn;
for(n=1;n21;n++)
{
switch(n)
{
case 1:{fn=1;break;}
case 2:{fn=1;break;}
default:
{
int a=1,b=1,i,j;
for(i=3;i=n;i++)
{
j=a+b;
a=b;
b=j;
}
fn=j;
}
}
printf("%d ",fn);
}
return 0;
}
因为只有6年,定义一个数组存储第n年各岁兔子的数量
#includestdio.h
int sum(int n)
{
int i,j,a[6];
a[0]=1; //初始化,第一年只有1对,都是1岁
for(i=1; i 6; i++)
a[i] = 0; //初始化,第一年只有1对,其余为0
for(i=1; i n; i++)
{//第n年x岁的兔子数是第n-1年x-1岁兔子的数量
// a[x] a[x-1]
for(j=5;j0;j--)
a[j] = a[j-1];//7岁的就会死掉,直接丢弃
//到3岁就可以生一对,所以从3(数组从0开始,故这里是2)加到6
a[0] = a[2] + a[3] + a[4] + a[5];
}
return (a[0] + a[1] + a[2] + a[3] + a[4] + a[5]);
}
void main()
{
int i=1;
for(i=1; i 25; i++)
{
printf("%-3d", i);
printf(":%5d\n", sum(i));
}
}
思路不要乱。这个月的兔子只有两个来源,一个来源是上个月的老兔子,另一个来源是这个月刚出生的兔子,而这个月刚出生的兔子,就是两个月前的所有兔子,因为两个月前的所有兔子,无论两个月前就是老的,还是两个月前刚生的,到了这个月就全部具有生育能力,每只都可以下一对儿,所以可以得到一个递推关系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;
}
至于你的程序,很难把它改正确,因为这题压根不是那个思路,那样想会越想越乱的
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流