前言略.

看到这个题目本来应该很高兴的,因为什么,因为太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数列求模问题 题解思路的更多相关文章

  1. 蓝桥杯 C语言 入门训练 Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  2. 蓝桥网试题 java 入门训练 Fibonacci数列

    ---------------------------------------------------------------------------------------------------- ...

  3. 18.12.09-C语言练习:兔子繁衍问题 / Fibonacci 数列

    题目: 问题解析: 这是典型的/Fibonacci 数列问题.具体这里不赘述. 问题中不论是初始的第1对兔子还是以后出生的小兔子都是从第3个月龄起每个月各生一对兔子. 设n1,n2,n3分别是每个月1 ...

  4. 蓝桥杯练习系统—基础练习 2n皇后问题

    问题描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后, 使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后都不在同一行. 同一列或 ...

  5. 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)

    入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...

  6. 蓝桥杯 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  7. 【蓝桥杯】入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...

  8. 入门训练 Fibonacci数列

      入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时, ...

  9. 入门训练 Fibonacci数列 (水题)

    入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...

随机推荐

  1. JS判断手机横竖屏

    在移动端开发时,有时候需要判断手机的横竖屏,那么就需要用到window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态. 屏幕方向对应的window.orientat ...

  2. 【P3398]】仓鼠找sugar

    暴力lca 题目 有一种情况肯定不行 较深得lca深度比浅的两个点还深,直接不行 如果可能存在解 则解一定是介中情况 较深的lca一定在另一个lca路径上. 判读呢? 就是用深的lca和浅的lca的两 ...

  3. CTS、CLS、CLR分别作何解释?

    CTS.CLS.CLR分别作何解释? 答:CTS:通用类型系统.CLS:通用语言规范.CLR:公共语言运行库.

  4. caffe的输入

    决定将caffe分为几个部分进行总结,首先是第一部分,输入数据以及输入层. 首先从输入数据对BP的影响开始介绍. sgd的随机性 由于是sgd,因此样本一定要shuffle.BP中说到,样本选择遵循俩 ...

  5. java后台导出pdf

    新页面打开wpf @RequestMapping("/showPdf") public String getpic( HttpServletRequest request, Htt ...

  6. 转 MYSQL 命令行大全 (简洁、明了、全面)

    MYSQL常用命令 .导出整个数据库 mysqldump -u 用户名 -p –default-character-set=latin1 数据库名 > 导出的文件名(数据库默认编码是latin1 ...

  7. PCA 实例演示二维数据降成1维

    import numpy as np # 将二维数据降成1维 num = [(2.5, 2.4), (0.5, 0.7), (2.2, 2.9), (1.9, 2.2), (3.1, 3.0), (2 ...

  8. 【PGP公钥】

    Fingerprint: 37AF 3814 3ABC 5DFA 97F5 300E 581D A2E3 F4D2 F585 Key ID:0x581DA2E3F4D2F585 -----BEGIN ...

  9. tcl之正则表达式

  10. git重新下载项目

    file-new-project from version control - git 修改网址为需要的网址