074.K阶斐波那契序列

简介: 074.K阶斐波那契序列
#include <stdio.h>
#include <stdlib.h>
#define  enoughsize 100  //最大队列长度
typedef struct 
{
  int *base;     //初始化的动态分配存储空间
  int front;      //头指针,若队列不空,指向队列头元素
  int rear;      //尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
int AddSum(int n,int *q)
{
  int sum=0;
  int i;
  for(i=0;i<n;i++)  sum+=q[i];
  return sum;
}
void main()
{
  SqQueue Q;
  int k,max,i,n,*store;
  printf("请输入斐波那奇的阶数:");
  scanf("%d",&k);
  printf("请输入序列中允许的最大数:");
  scanf("%d",&max);
  Q.base=(int*)malloc(k*sizeof(int));
  store=(int*)malloc(enoughsize*sizeof(int));
  if((!Q.base)||(!store))
  {
    printf("Error!");
    return;
  }
  for(i=0;i<k;i++)
  {
    store[i]=0;
    Q.base[i]=0;
  }
  store[k-1]=1;
  Q.base[k-1]=1;   //初始化fib序列
  store[k]=AddSum(k,Q.base);
  Q.front=0;
  Q.rear=k-1;
  n=k;
  while(store[n]<=max)
  {
    Q.rear=(Q.rear+1)%k;
    Q.base[Q.rear]=store[n];
    n++;
    store[n]=AddSum(k,Q.base);
  }
  printf("The first %d%s%d%c%s",n," numbers are less than ",max,'.',"\n");
  printf("The numbers are:\n");
  for(i=0;i<n;i++)  printf("%d%c",store[i],' ');
  printf("\n");
}
相关文章
|
5月前
|
机器学习/深度学习 存储 算法
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
【算法训练-回溯算法 一】【排列问题】全排列、全排列II
49 0
|
7月前
|
算法
【算法专题突破】二分查找 - x 的平方根(18)
【算法专题突破】二分查找 - x 的平方根(18)
37 0
|
2月前
PTA-求平方与倒数序列的部分和
求平方与倒数序列的部分和
19 1
|
9月前
迭代法解决递推问题:数列和,sinx,ex的近似值
迭代法解决递推问题:数列和,sinx,ex的近似值
72 0
|
7月前
|
算法
【学会动态规划】摆动序列(27)
【学会动态规划】摆动序列(27)
20 0
|
9月前
Fibonacci数列的多种求法
Fibonacci数列的多种求法
39 0
|
11月前
|
C++ 容器
求解子序列
求解子序列
46 0
|
11月前
|
人工智能 算法
有序数组的平方
有序数组的平方
|
算法
LeetCode:376. 摆动序列——说什么贪心和动规~
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。 相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。 子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。
|
算法
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)
【递归与递推 3】AcWing 717. 简单斐波那契(求解斐波那契数列的若干方法)