[18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路
前言略.
看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊!
可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛
//Fibonacci数列递归一般问题常规方法(当目标序列号<32时适用 评判标准:运行时间<1.00s)
#include <iostream>
using namespace std; long Fib(int); int main()
{ int n = ; cin >> n;
cout << Fib(n) % ;
return ;
} long Fib(int x)
{
if (x != )
{
if (x == || x == )
{
return ;
}
else return (Fib(x - ) % + Fib(x - ) % ) % ;
}
}
这里顺带提一下,大数求模的一个运算律(只列了一个):
(a+b)%N == a%N+b%N == (a%N+b%N)%N,常用哦~
于是我想,这样用原来的常规方法内存又要占爆,CPU又要发烧(毕竟n值一上去那个递归次数你懂得.)
于是转变思路用循环多次填充的方法尝试再(wan)次(quan)实(chong)现(xie)了一遍代码,以10位Fibonacci数的顺序生成为一轮填充
剩下的只需要找到目标n值对应的10位中的序列号以及循环填充轮数就行了,省省宝贵的内存(虽然限制是256M但是总觉得是虚报的...)
下面是具体实现方案,记得打注释部分要写,不然就会在循环填充的时候卡死。
//Fibonacci数列对数求模问题 题解 来源:蓝桥杯训练系统入门级 作者:Yuudachi晚风 #include <iostream>
using std::cin;
using std::cout; int main()
{ int n = ; cin >> n; int Fibs[] = {}; //10个一轮进行循环填充,可以自行调试更改
Fibs[] = Fibs[] = ;
int seq = n % - ; //目标输出数组中目标数值序列号
if (seq == -) seq = ; //重置10的倍数的序列值
long times = n / + ; //打到目标输出数组所需轮数
if (n % == ) times = n / ; //重置10的倍数的循环填充轮数值 //cout << "seq=" << seq << "times=" << times << endl; for (int i = ; i < times; i++)
{
for (long j = ; j < ; j++)
{
if (i != && j == )
{
Fibs[] = Fibs[] + Fibs[]; //第一轮填充后每轮重置序列0的值
Fibs[] = Fibs[] + Fibs[]; //第一轮填充后每轮重置序列1的值
}
Fibs[j] = (Fibs[j - ] + Fibs[j - ]) % ;
}
}
cout << Fibs[seq] % ; return ;
}
大概就是这样了,欢迎批评指正,以及比我更高效的算法方案在评论区讨论!感谢观看。
[18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路的更多相关文章
- 蓝桥杯 C语言 入门训练 Fibonacci数列
问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...
- 蓝桥网试题 java 入门训练 Fibonacci数列
---------------------------------------------------------------------------------------------------- ...
- 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列
题目: 问题解析: 这是典型的/Fibonacci 数列问题.具体这里不赘述. 问题中不论是初始的第1对兔子还是以后出生的小兔子都是从第3个月龄起每个月各生一对兔子. 设n1,n2,n3分别是每个月1 ...
- 蓝桥杯练习系统—基础练习 2n皇后问题
问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...
- 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...
- 蓝桥杯 入门训练 Fibonacci数列
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...
- 【蓝桥杯】入门训练 Fibonacci数列
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...
- 入门训练 Fibonacci数列
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...
- 入门训练 Fibonacci数列 (水题)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...
随机推荐
- 【转】android中的Style与Theme
Android默认情况下提供了一些实用的主题样式,比如说Theme.Dialog可以让你的Activity变成一个窗口风格,而Theme.Light则让你的整个Activity具有白色的背景,而不是黑 ...
- MapReduce计算每年最大值
1. 测试文件生成程序,参考 https://www.cnblogs.com/jonban/p/10555364.html MapReduce程序示例如下: 2. 新建Maven项目 hadoop ...
- 文本编辑器Vim技巧
1. 导入文件内容 :r 文件名 2. 插入当前日期 :r !date 3. :!which ls 4. :r !命令
- C语言函数申明关键字inline
内联inline是给编译器的优化提示,如果一个函数被编译成inline的话,那么就会把函数里面的代码直接插入到调用这个函数的地方,而不是用调用函数的形式.如果函数体代码很短的话,这样会比较有效率,因为 ...
- quartz的持久化任务调度使用应用的dataSource
Quartz提供两种基本作业存储类型--->第一种类型叫做RAMJobStore: 最佳的性能,因为内存中数据访问最快 不足之处是缺乏数据的持久性,当程序路途停止或系统崩溃时,所 ...
- 基于Jquery的原生态dialog弹出窗口-zapWindow
看到boss系统搓B的填出窗口,不忍直视,坚决的换掉! 采用zapwindow(来源不清楚了,总之是前人留下的),做了修改,当前支持三类弹出类型: 1. 指定url 2. 自定义html 3. 指定D ...
- 10-UIScrollView
UIScrollView 掌握 UIScrollView的常见属性 UIScrollView的常用代理方法 UIScrollView的缩放 UIScrollView和UIPageControl的分页 ...
- 如何将一个div水平垂直居中
方案一: div绝对定位水平垂直居中[margin:auto实现绝对定位元素的居中], 兼容性:,IE7及之前版本不支持 div{ width: 200px; height: 200px; backg ...
- jquery 操作css 尺寸
.height() 获取元素集合中的第一个元素的当前计算高度值,或设置每一个匹配元素的高度值. .height() 获取匹配元素集合中的第一个元素的当前计算高度值. 这个方法不接受参数. $(wind ...
- Linux添加swap分区
swap分区的作用为当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用,那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到S ...