• NUC1016 斐波那契数列


    斐波那契数列

    时间限制: 1000ms 内存限制: 65536KB

    问题描述

    “斐波那契数列”的发明者,是意大利数学家列昂纳多?斐波那契(生于公元1170年,籍贯大概是比萨,卒于1240年后)。他还被人称作“比萨的列昂纳多”。1202年,他撰写了《珠算原理》一书。

    斐波那契数列衍生于《珠算原理》中的一道题目:

    某人把一对兔子放入一个四面被高墙围住的地方。假设每对兔子每月能生下一对小兔,而每对新生小兔从第二个月开始又具备生育能力,请问:一年后应有多少对兔子?

    正如丹?布朗对我们所言,答案就是0,1,1,2,3,5,8,13,21,然后可按34,55……一直排列下去。(从第三位起)每位数都是前两位数之和,这是欧洲人所知的第一个此类数列。

    斐波那契数数列可表示为0、1、1、2、3... ( N1=0,N2=1 Ni=Ni-1+Ni-2 )

    给定i计算斐波那契数列第Ni项最后7位数字.

    输入描述

    第一行有一个正整数N表示下边有N个情况需要你去计算。

    接下来的N行每行有一个正整数i,表示计算第Ni项的最后7位数字。

    其中( 1 ≤ i ≤ 1000000 )

    输出描述

    输出N行计算结果

    样例输入

    4

    5

    6

    7

    10

    样例输出

    3

    5

    8

    34


    问题分析:

    对于每次输入的i,若调用一次计算函数,那么重复计算就太多了。所以,打表是必须的。

    每一项求的是最后7位数,就用模除,数值就不太大了。

    程序说明:

    函数setfib()的功能是计算斐波那契数列的各个项,计算结果放入表中。

    需要注意元素的个数,定义数组fib[]时,那个“+1”是必要的。


    参考链接:(略)


    AC的C++程序如下:

    #include <iostream>
    
    using namespace std;
    
    const int MOD = 10000000;
    const int N = 1000000;
    int fib[N+1];
    
    void setfib(int n)
    {
       fib[1] = 0;
       fib[2] = 1;
    
       for(int i=3; i<=n; i++)
           fib[i] = (fib[i - 2] + fib[i - 1]) % MOD;
    }
    
    int main()
    {
        int n, i;
    
        setfib(N);
    
        cin >> n;
        while(n--) {
            cin >> i;
    
            cout << fib[i] << endl;
        }
    
        return 0;
    }





  • 相关阅读:
    Hibernate4集成 Annotation使用教程
    搭建SSH入过的那些坑
    Tomcat配置虚拟目录
    java中类名.class、实例.getclass()区别
    nginx使用ssl模块配置HTTPS支持
    nginx安装配置域名转发
    RedHat安装DB2详细步骤(附卸载、备份恢复步骤)
    iOS学习笔记-084.粒子效果——路径移动
    iOS APP打包上传到AppStore的最新步骤
    git使用命令, 特别:git checkout -b a 与 git branch a区别
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563883.html
Copyright © 2020-2023  润新知