c - C 中的修正斐波那契

标签 c dynamic-programming fibonacci

我需要生成修改后的斐波那契数列,并且它必须是完全动态的。这里将给出f0和f1,即生成序列后f0=1和f1=3。我应该在特定索引处打印结果值。

例如: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-斐波那契数列中的值。

示例输入: 1 3 3 4 8 11

示例输出: 11 76 322

我有为上述程序生成斐波那契数列的代码,但我想显示 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;
}

最佳答案

像这样吗?该数组在 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] ]);

关于c - C 中的修正斐波那契,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40792610/

相关文章:

algorithm - 给定一组具有相关权重的事件,选择将最大化总权重的一组非重叠事件

algorithm - 我将如何使用 DP 解决这个问题?

c# - 这个天真的递归斐波那契实现如何不是stackoverflow?

algorithm - 最大化矩阵中 "non-overlapping"数字的总和

java - 斐波那契数列除了用户输入的数字外不会打印任何内容

c++ - 斐波那契数列

c - C 中 malloc() 触发断点

c - MIPS 操作存储在数据中的数组

c - 如何将项目添加到 Pidgin 菜单

比较c中的两个字符串