任务描述
输出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;
}