首页 > 其他 > 详细

斐波那契打表

时间:2020-01-07 21:26:49      阅读:106      评论:0      收藏:0      [点我收藏+]


至尊大法师——奇异博士,在与灭霸的战斗中,奇异博士幻化出了许多的分身,而奇异博士的分身有很多,但是奇异博士每次分身变换需要时间,为了帮助奇异博士打败灭霸,让我们帮他计算一下这些分身有多少个吧。 

奇异博士是个怪人,他可以每一秒进行一次变换,每次分身后分身个数满足这样的一个序列:1,1,2,3,5,8,13,21,34……。(即第一秒是1个,第二秒是1个,第三秒是2个。。。) 

给你一个数n,接下来有n次查询,对于每次查询输出经过第m秒钟后分身的个数。由于输出的数会很大,所以请输出结果的后四位即可,对于不足四位需要前补0。

技术分享图片

 

 

输入

在第一行输入一个数n,表示查询次数 (1<=n<=10000)

接下来有n行,每行有一个数m,表示第m秒钟 (1<=m<=10^6)

输出

输出m秒钟后分身的结果,输出结果的后四位即可,对于不足四位需要前补0,每个输出占一行。

样例输入 Copy

4
1
3
4
5

样例输出 Copy

0001
0002
0003
0005

提示

1表示第1秒钟后分身结果0001(当然是自身咯)  



3表示第3秒钟后分身结果0002   



4表示第4秒钟后分身结果0003   



5表示第5秒钟后分身结果0005

  (根据序列的变换得出第m秒钟后分身结果) 

解题思路:
该题要先打表,要不然会超时
AC代码:
#include "bits/stdc++.h"
#define hhh printf("hhh\n")
#define see(x) (cerr<<(#x)<<‘=‘<<(x)<<endl)
using namespace std;
typedef unsigned long long ll;
typedef pair<int,int> pr;
inline int read() {int x=0,f=1;char c=getchar();while(c!=-&&(c<0||c>9))c=getchar();if(c==-)f=-1,c=getchar();while(c>=0&&c<=9)x=x*10+c-0,c=getchar();return f*x;}
  
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
const int mod = 1e8+7;
const int M = 10000;
int fb[maxn];
int main()
{
    int t;
    fb[1]=fb[2]=1;
    for(int i=3;i<=maxn;i++){
        fb[i]=fb[i-1]%M+fb[i-2]%M;//斐波那契打表
    }
    scanf("%d",&t);
    while(t--){
        int n;
        scanf("%d",&n);
        printf("%04d\n",fb[n]%M);
    } 
    return 0;
}

 

 

斐波那契打表

原文:https://www.cnblogs.com/lipu123/p/12163404.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!