K阶斐波那契数列(NOJ理论第10题)(非精解)

前言

  这篇文章主要是为了诠释什么叫“k阶斐波那契数列”,以免各位做的时候意味题错了,同时还能水一篇文章

  k阶斐波那契数列一开始前k-1项都是0,第k项为1,后面生成的每一项都是前数列之前k项的和

答案

#include <iostream>

static int MAXSIZE;

typedef struct CircularQueue
{
    int series[500];
    int rear;
    int front;
} CircularQueue;

void init(CircularQueue *aQueue)
{
    aQueue->rear = aQueue->front = 0;
    
}

int isEmpty(CircularQueue *aQueue)
{
    return aQueue->front == aQueue->rear;
}

int isFull(CircularQueue *aQueue)
{
    return (aQueue->rear + 1) % MAXSIZE == aQueue->front;
}

int pop(CircularQueue *aQueue)
{
    int rtn = aQueue->series[aQueue->front];
    aQueue->front = (aQueue->front + 1) % MAXSIZE;
    return rtn;
}

void push(CircularQueue *aQueue, int element)
{
    if (!isFull(aQueue))
    {
        aQueue->series[aQueue->rear] = element;
        aQueue->rear = (aQueue->rear + 1) % MAXSIZE;
    }
    else
    {
        pop(aQueue);
        aQueue->series[aQueue->rear] = element;
        aQueue->rear = (aQueue->rear + 1) % MAXSIZE;
    }
}

void initF(int *F, int k)
{
    for (int i = 0; i < k - 1; i++)
    {
        F[i] = 0;
    }
    F[k - 1] = 1;
}

void pushF(CircularQueue* aQueue, int* F, int k)
{
    for (int i = 0; i < k; i++)
    {
        push(aQueue, F[i]);
    }
}

void caculate(int* F, int k)
{
    int newData = 0;
    for (int i = 0; i < k; i++)
    {
        newData += F[i];
    }
    for (int i = 0; i < k - 1; i++)
    {
        F[i] = F[i + 1];
    }
    F[k - 1] = newData;
}

int main()
{
    int k, max;
    scanf("%d%d", &max, &k);
    MAXSIZE = k + 1;
    CircularQueue *aQueue = (CircularQueue *)malloc(sizeof(CircularQueue));
    init(aQueue);
    int Fibonacci[k];
    initF(Fibonacci, k);
    pushF(aQueue, Fibonacci, k);
    while (1)
    {
        caculate(Fibonacci, k);
        if (Fibonacci[k - 1] <= max)
        {
            push(aQueue, Fibonacci[k-1]);
        }
        else
        {
            break;
        }
    }
    
    if (k != 1)
    {
        while (!isEmpty(aQueue))
        {
            printf("%d ", pop(aQueue));
        }
    }
    else{
        printf("1");
    }
    return 0;
}

  (还就那个淼)

posted @ 2022-03-20 19:15  帝皇の惊  阅读(180)  评论(0)    收藏  举报