文章目录

1 题目

斐波那契凤尾
时间限制 3000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)
题目描述
NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。
为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。

输入描述:
输入有多组数据。
每组数据一行,包含一个整数n (1≤n≤100000)。

输出描述:
对应每一组输入,输出第n个斐波那契数的最后6位。

输入例子:
1
2
3
4
100000

输出例子:
1
2
3
5
537501

2 解析

由于多组数据连续输入,每次都计算会超时,于是先打表然后查询。打表(空间换时间)时间复杂度O(n+Q),n为表长,Q为查询次数。

3 参考代码

#include 

const int MAXN = 100010;
int F[MAXN] = {1,1};

int main(int argc, char const *argv[]){
int n;
for (int i = 2; i <= 100000; ++i) {//打表(空间换时间)时间复杂度O(n+Q),n为表长,Q为查询次数
F[i] = (F[i -1] + F[i-2])% 1000000;
}
while(scanf("%d", &n) != EOF){
printf((n < 25 ?"%d\n" : "%06d\n"),F[n]);//F[25]=121393第一个6位数,因此当n大于等于25时,补齐前面的0
}
return 0;
}