意大利数学家斐波那契(Leonardo Fibonacci)是12、13世纪欧洲数学界的代表人物。他提出的“兔子问题”引起了后人的极大兴趣。 “兔子问题”假定一对大兔子每一个月可以生一对小兔子,而小兔子出生后两个月就有繁殖能力,问从一对小兔子开始,n个月后能繁殖成多少对兔子?
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试输入一个正整数n(1≤n≤46)。
输出格式:
对于每组测试,输出n个月后能繁殖成的兔子对数。
输入样例:
1
4
输出样例:
3
有个高效的方法,因为每组测试输入n最大是46,可以先算出46个斐波那契数列用数组保存。
之后读取测试输入的n,直接从数组中取对应下标的值就好了、不用每次都从头计算。
解答代码如下:
#include <stdio.h>
int main()
{
int sn[47] = {0,1};
int i,t,n;
for(i=2;i<=46;i++)
{
sn[i] = sn[i-1] + sn[i-2];
}
scanf("%d",&t);
for(i=0;i<t;i++)
{
scanf("%d",&n);
printf("%d\n", sn[n]);
}
return 0;
}
如有帮助,望采纳!谢谢!
代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,n,*p;
int a = 1,b=1,t;
scanf("%d",&n);
p = (int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",&p[i]);
for (i=0;i<n;i++)
{
if(p[i]<3)
printf("1\n");
else
{
for (j=3;j<=p[i];j++)
{
t = a+b;
a = b;
b = t;
}
printf("%d\n",t);
}
}
free(p);
p = 0;
return 0;
}
#include <stdio.h>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
int a1=1,a2=1,a3;
int m;
cin>>m;
if(m==1 || m==2)
cout<<1<<endl;
else
{
int t = 2;
while(t<m)
{
a3 = a1+a2;
a1 = a2;
a2 = a3;
t++;
}
cout<<a3<<endl;
}
}
return 0;
}