一本通 1188:菲波那契数列(2)
一本通 1188:菲波那契数列(2)
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 31831 通过数: 11809
【题目描述】
菲波那契数列是指这样的数列: 数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。
【输入】
第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数a(1 <= a <= 1000000)。
【输出】
n行,每行输出对应一个输入。输出应是一个正整数,为菲波那契数列中第a个数对1000取模得到的结果。
【输入样例】
4
5
2
19
1
【输出样例】
5
1
181
1
【我的答案】
注:此答案虽然也能通过,但还是建议将其保存为数组,用的时候直接取就可以。这个是每次样例都现场推导。
# include <bits/stdc++.h>
using namespace std;
int main (){
int n;
cin >> n;
int num;
int a, b, c;
while(n--){
scanf("%d", &num);
a = 1;
b = 1;
c = 2;
if(num == 1 || num == 2){
printf("1\n");
}
else if (num == 3){
printf("2\n");
}
else{
num -= 3;
while(num--){
a = b;
b = c;
c = (a + b)%1000;
}
printf("%d\n", c);
}
}
return 0;
}
//2021年10月6日17:46:48