Модифицированный Фибоначчи в Си

Мне нужно создать модифицированную серию Фибоначчи, и она должна быть полностью динамичной. Здесь будут заданы 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-Фибоначчи).

Формат вывода: выведите значения из ряда 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;
}

3 ответа

Решение

Как это? Массив определяется в 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. Вы объявляете и определяете массив в функции, 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;
}

Вот код для генерации набора чисел Фибоначчи меньше заданного числа 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));
}
Другие вопросы по тегам