意大利数学家斐波那契数列

意大利数学家斐波那契(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;
}

img

如有帮助,望采纳!谢谢!

代码如下:

#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;
}