信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1188:菲波那契數列(2)
OpenJudge NOI 2.3 1760:菲波那契數列(2)
【題目考點】
1. 求斐波那契數列
多種方法求斐波那契數列
【解題思路】
該題可能求到斐波那契數列第10610^6106項,那么可以選擇迭代、遞推等方法。
該題出現在遞推的章節,那么主要關注用遞推法解該題。
該題有多組詢問??梢韵惹蟪鲮巢瞧鯏盗械那?span id="ze8trgl8bvbq" class="katex--inline">10610^6106項,然后針對每次詢問取數組中的一項。
題目要求對結果取模1000,那么遞推關系為:ai=(ai?1+ai?2)%1000a_i = (a_{i-1}+a_{i-2})\%1000ai?=(ai?1?+ai?2?)%1000,每次計算后都取模1000即可。
【題解代碼】
解法1:遞推
#include <bits/stdc++.h> using namespace std; int a[1000005]; int main() {int n, x; a[1] = a[2] = 1;for(int i = 3; i <= 1000000; ++i)//先求出斐波那契數列前1000000項 a[i] = (a[i-1]+a[i-2])%1000;cin >> n;for(int i = 1; i <= n; ++i)//n次詢問 {cin >> x;cout << a[x] << endl;}return 0; }解法2:迭代
#include<bits/stdc++.h> using namespace std; int main() {int ct, p;cin >> ct;for(int i = 1; i <= ct; ++i){cin >> p;if(p <= 2)cout << 1 << endl;else {int a = 1, b = 1, t;for(int j = 3; j <= p; ++j){t = b;b = (a + b) % 1000;a = t;}cout << b << endl;}}return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1188:菲波那契数列(2) | OpenJudge NOI 2.3 1760:菲波那契数列(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dbproviderfactories.
- 下一篇: yum 安装没有公钥_window 安装