我需要生成一个经过修改的Fibonacci系列,它必须是完全动态的。这里给出f0和f1,即在产生序列后f0 = 1和f1 = 3。我应该在特定索引处打印结果值。
Ex:f0 = 1,f1 = 3,testcase(n)= 3(这可能不会改变特定值)
t1 = 4 t2 = 8 t3 = 11,依此类推。应使用以下函数为11个元素生成系列:f [i] = f [i-1] + f [i-2]
它可以表示为:
0=>1
1=>3
2=>4
3=>7
4=>11
5=>18
6=>29
7=>47
8=>76
9=>123
10=>199
11=>322
我应该在索引4,8和11(必须是我的程序的输出)上打印值,即11 76 322
。
输入格式:
f0,f1和n(其中n是指数的数量)
其中ti = [t1,t2,.... tn-1](指定R-Fibonacci系列的索引)。
输出格式: 根据给定的指数打印R-fibonacci系列的值。
示例输入: 1 3 3 4 8 11
示例输出: 11 76 322
我有为上述程序生成Fibonacci系列的代码,但我想在4,8,11个索引处显示该值。这是代码:
int fib(int n)
{
int f[n+1];
int i;
f[0]=1;
f[1]=3;
for(i=2;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
int main()
{
int n=11
printf("%d ",fib(n));
getchar();
return 0;
}
答案 0 :(得分:1)
如果我理解正确,这个问题与fibonacci关系不大,而且与C中的范围有关。您在函数fib
中声明和定义数组,并在该函数中填充(并返回单个元素值)。你想要的是从调用者那里访问整个数组。
这样做的一种简单方法是在调用方法中声明数组,并将指针传递给fib
函数:
#include <stdio.h>
int fib(int f[], int n)
{
int i;
f[0]=1;
f[1]=3;
for(i=2;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
int main()
{
int n=11;
int f[12];
fib(f, n);
printf("%d ", f[4]);
printf("%d ", f[8]);
printf("%d ", f[11]);
getchar();
return 0;
}
答案 1 :(得分:1)
喜欢这个?该数组在main
中定义,并作为参数传递给函数。该函数填充数组,不返回任何内容,然后在main
中,您可以打印所需的元素。
你需要一个循环来做到这一点,另一个动态数组保存你要打印的索引。
#include <stdio.h>
void fib(int n, int *f)
{
int i;
f[0] = 1;
f[1] = 3;
for(i = 2; i <= n; i++)
{
f[i] = f[i-1] + f[i-2];
}
}
int main()
{
int n = 11;
int f[n+1];
fib(n, f);
printf("%d ", f[8]);
printf("%d ", f[11]);
printf("\n");
getchar();
return 0;
}
节目输出:
76 322
我会留下一些代码来编写,但假设您创建了所需索引值的动态数组,例如
int index[m];
index[0] = 4;
index[1] = 8;
index[2] = 11;
您可以打印系列术语,例如
printf("%d ", f[ index[i] ]);
答案 2 :(得分:0)
这是一个使用递归算法生成一组小于给定数N的斐波纳契数的代码:
#include<stdio.h>
int fibo(int n)
{
if(n<2)
return n;
else
return (fibo(n-1)+fibo(n-2));
}
void main()
{
int n,i;
printf("\n Enter number : ");
scanf("%d",&n);
printf("\n Fibonacci series is : ");
for(i=0;i<n;i++)
printf("\n %d",fibo(i));
}