题目:

//查阅的资料:k阶斐波那契序列的前k-1项均为0,第k项为1,之后为前k项之和
//eg:       2阶斐波那契序列的前1项为0,第1项为1,之后为前2项之和//解决的思想:使用最大容量为k+1的循环队列(少用了一个元素空间,即用了k个空间)
//循环队列的初始状态:将前k-1个空间的数据置为0,最后一个(即第k个)空间的数据置为1
//然后将队列所有数据相加,得到sum,再将队头元素出队,将sum入队,循环即可
//直至sum>max(斐波那契序列肯定能找到>max的sum的,毕竟一直在增加),循环结束(此时是不进行队头出队,sum入队的后续操作的,这时队列的元素满足题意,
//即“留在循环队列中的元素应是所求k阶斐波那契序列中的最后k项f(n-k+1)...f(n))//思考:之前我认为循环队列没啥用,但这题之后,我发现我的认识是错的。
//循环队列有限定空间,便于一些题目的求解#include<iostream>
using namespace std;
#define QElemType int
int MaxQueueSize;
typedef struct
{QElemType* base;int head,tail;
}SqQueue;bool Init_Queue(SqQueue& Q)//初始化循环队列
{//k阶斐波那契序列,根据题意需要队列存k各项//为了区别队空、队满,少用一个空间,所以开辟了k+1个空间Q.base=new QElemType[MaxQueueSize+1];//少用一个元素空间用来区别队空、队满if(!Q.base) exit(-2);Q.head=Q.tail=0;return true;
}bool IsFull(SqQueue Q)//队列满,返回true;否则返回false
{if((Q.tail+1)%(MaxQueueSize+1)==Q.head) return true;return false;
}bool EnQueue(SqQueue& Q,QElemType e)//入队
{if(IsFull(Q)) return false;Q.base[Q.tail]=e;Q.tail=(Q.tail+1)%(MaxQueueSize+1);return true;
}bool DeQueue(SqQueue& Q,QElemType& e)//出队
{if(Q.head==Q.tail) return false;e=Q.base[Q.head];Q.head=(Q.head+1)%(MaxQueueSize+1);return true;
}void Output_Queue(SqQueue Q)//打印队列数据
{int p=Q.head;while(p!=Q.tail){cout<<Q.base[p]<<" ";p=(p+1)%(MaxQueueSize+1);}cout<<endl;
}
//以上为循环队列的基本操作
int Sum_Queue(SqQueue Q)
{int p=Q.head;int sum=0;while(p!=Q.tail){sum+=Q.base[p];p=(p+1)%(MaxQueueSize+1);}return sum;
}bool Get_XiaoyuMax_Fibonacci()//得到满足题意的小于max的k阶斐波那契序列,该序列最后在循环队列中
{SqQueue Q;Init_Queue(Q);while(!IsFull(Q))EnQueue(Q,0);Q.base[Q.tail-1]=1;//将最后一个数据置为1//循环队列初始化完成(sum必为1)int sum;cout<<"输入max:";int max;cin>>max;if(Q.base[Q.tail-1]>max)return false;QElemType e;do{sum=Sum_Queue(Q);if(sum<=max){//若sum小于max,则将队头出队,sum入队DeQueue(Q,e);EnQueue(Q,sum);}}while(sum<=max);//循环结束后sum>max 循环队列的元素满足题意cout<<"满足题意的斐波那契序列:";Output_Queue(Q);return true;
}int main()
{cout<<"输入斐波那契序列的阶数:";cin>>MaxQueueSize;if(Get_XiaoyuMax_Fibonacci())cout<<"成功\n";elsecout<<"失败\n";return 0;
}
输入斐波那契序列的阶数:5
输入max:1000
满足题意的斐波那契序列:61 120 236 464 912
成功Process returned 0 (0x0)   execution time : 2.926 s
Press any key to continue.

2020-11-4 关于k阶斐波那契序列的问题相关推荐

  1. 西工大NOJ数据结构理论——010.k阶斐波那契数列(严3.32)

    k阶斐波那契序列定义:第k和k+1项为1,前k - 1项为0,从k项之后每一项都是前k项的和 k=2时,斐波那契序列为:0,1,1,2,3,5,8,13... k=3时,斐波那契序列为:0,0,1,1 ...

  2. 求解第K个斐波那契质数

    求解第K个斐波那契质数 转载于:https://www.cnblogs.com/yang12138/p/10634143.html

  3. 842. 将数组拆分成斐波那契序列

    链接:842. 将数组拆分成斐波那契序列 题解: class Solution {public:vector<int> splitIntoFibonacci(string S) {vect ...

  4. 斐波那契序列递归方法_斐波那契和卢卡斯序列

    斐波那契序列递归方法 这篇文章涉及我最喜欢的三个主题-数学,通过经验传递知识(教程单元测试)和研究的重要性. 大多数开发人员都通过面试来了解斐波那契数列 . 为了简要回顾该系列,定义了: F( n ) ...

  5. 斐波那契序列与黄金分割比

    Fibonacci Sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, - fib = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55 ...

  6. java求第k个斐波那契数_Java程序查找第n个斐波那契数

    可以通过多种方式找到第n个斐波那契数.在这里,我们将使用动态编程技术以及优化空间. 让我们看一个例子- 示例public class Demo{ static int fibo(int num){ i ...

  7. 《每日一题》842. Split Array into Fibonacci Sequence 将数组拆分成斐波那契序列

    给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列表 F,且满 ...

  8. leetcode842. 将数组拆分成斐波那契序列(回溯)

    给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列表 F,且满 ...

  9. LeetCode 842. 将数组拆分成斐波那契序列(暴力查找)

    1. 题目 给定一个数字字符串 S,比如 S = "123456579",我们可以将它分成斐波那契式的序列 [123, 456, 579]. 形式上,斐波那契式序列是一个非负整数列 ...

最新文章

  1. 国庆双节长假旅游出行必装的手机软件
  2. python简单代码hello-PySide教程:一个简单的点击按钮示例
  3. python提取文件指定列_如何从csv文件中提取特定列并使用python绘图
  4. win 2016 ssh_如何使用BPF将SSH会话转换为结构化事件
  5. oracle 查看任务数量,关于dbms_scheduler创建任务数量的疑问
  6. C/C++高级算法之绘制曼德布洛特集
  7. 学python必会英语单词_Python必备常用英语词汇(一)
  8. Python爬虫的经典多线程方式,生产者与消费者模型
  9. 计算机设计大赛西北地区赛,我校学生在中国大学生计算机设计大赛西北地区赛中获佳绩...
  10. 如何用python写一个答题程序_python练习题库
  11. stuiod3t-2019030.dmg下载及studio3t macOS Cracking教程
  12. html banner广告代码,jquery实现的Banner广告收缩效果代码
  13. 《指数基金投资指南》 阅读笔记
  14. STL容器底层实现数据结构
  15. 2kids学汉字 android,新2Kids学汉字
  16. 从数据库取出的tup转换成dict
  17. 使用 dlopen 和 dlsym 来使用 C++ 中的函数、类
  18. 数据仓库Hive编程——HiveQL的数据定义(一):Hive中的数据库
  19. win10 明明可以上网但显示无Internet的问题(已解决)
  20. 机器学习 之 作业1

热门文章

  1. 解决-bash: rvm: command not found提示,在mac环境下安装离线安装rvm
  2. 焊接单片机最小系统板,驱动lcd1602
  3. 「博客之星」投票中:送你喜爱的博主C位出道
  4. 常见的七款API聚合平台对比和详细介绍
  5. EPSON LS3-401S机器人学习笔记 8 - TCPIP通信编程
  6. OCP 1Z0 052 141
  7. CCS Cannot open soure file ***
  8. MySQL mysqlbackup backup databse on win2k12r2
  9. RMAN 的优缺点及RMAN 备份及恢复步骤
  10. 007.代理模式Proxy