请问我写的有什么问题,要怎么改

任务描述
输出Fibonacci数列中任意两项之和。

输入格式:
两个整数a,b(大于0小于 等于60的正整数),以空格分隔。

输出格式:
输出Fibonacci数列中第a项和第b项之和。

输入样例:
4 6
输出样例:
11
输入样例:
20 30
输出样例:
838805
输入样例:
56 52
输出样例:
258802713816


#include
int main(){
    int c=0,d=0,e=0,f=0,sum=0,k=0,i;
    int a[60],b[60];
    scanf("%d %d",&c,&d);
    a[0]=1;
    a[1]=1;
    for(i=0;i<60;i++){
        a[i]=a[i-1]+a[i-2];
        b[k++]=a[i++];
    }
    for(i=1;i<=k;i++){
        if(i==c)
            e=b[i];
        if(i==d)
            f=b[i];
    }
    sum=e+f;
    printf("%d",sum);
}

C语言代码:

#include<stdio.h>
#include<math.h>
int main()
{
    int a,b,i;
    long long a_b=0,a_0=0,a_1=1;
    scanf("%d%d",&a,&b);
    for(i=0;i<=60;i++)
    {
        if(i==a)
        a_0=a_1;
        if(i==b)
        a_b=a_1;
        a_1=a_0+a_1;
        a_0=a_1-a_0;
    }
    printf("%lld\n",a_0+a_b);
    return 0;
}

看起来程序的代码逻辑是正确的。但是,有一些小的问题。

数组的定义不正确:您定义的数组大小为 60,而斐波那契数列的项数较多,因此定义数组的大小要足够大。

数组的遍历不正确:您的代码中的循环语句有些不对。第 4 行的循环只会执行一次,因为在第 9 行您递增了 i。第 10 行的数组 b 是不需要的,请将其删除。

输出格式不正确:您需要输出 Fibonacci 数列中任意两项之和,而不是所有项之和。

修正以上问题后的代码如下:

#include<stdio.h>
#include<math.h>

int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    int n = fmax(a, b);
    int f[n];
    f[0] = 1;
    f[1] = 1;
    for (int i = 2; i < n; i++)
    {
        f[i] = f[i-1] + f[i-2];
    }
    printf("%d\n", f[a-1] + f[b-1]);
    return 0;
}