【问题标题】:Modified Fibonacci in CC语言修改斐波那契
【发布时间】:2016-11-24 18:17:55
【问题描述】:

我需要生成一个修改后的斐波那契数列,它必须是完全动态的。这里将给出 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-fibonacci 序列中的值。

示例输入: 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;
}

【问题讨论】:

  • OT 但关于这个系列的有趣(对我而言)事实是每个术语 n 变得越来越接近 Φ**n。 (Φ 黄金比例)。
  • 是的,但是有没有办法可以创建一个新数组并将系列中生成的值映射为数组索引值? @WeatherVane
  • @WeatherVane 据我所知,这些值将是黄金比例,因为这些值将呈指数级增长
  • 您可以在main 中定义数组作为函数参数传递。
  • @WeatherVane 你能告诉我怎么做吗?因为,我试图让它从过去 2 小时左右开始工作。我现在正在生成该系列。但我无法提取第 4,8 和第 11 个索引处的值

标签: c dynamic-programming fibonacci


【解决方案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】:

如果我理解正确,这个问题实际上与斐波那契没有什么关系,而是关于 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;
}

【讨论】:

    【解决方案3】:

    这是使用递归算法生成一组小于给定数 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));
    }
    

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 2016-04-21
      • 2015-07-05
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多