1. 程式人生 > >關於"斐波那契數列"你能做到哪一步?

關於"斐波那契數列"你能做到哪一步?

內存限制 clas fab odm 分享圖片 內存 const mil 研究

關於董永鍵老師一本通書的裴波那契數列你能做到哪一個?

反正我是沒做完。

技術分享圖片
1071:菲波那契數

時間限制: 1000 ms         內存限制: 65536 KB
提交數: 18129     通過數: 9498 
【題目描述】
菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。給出一個正整數k,要求菲波那契數列中第k個數是多少。

【輸入】
輸入一行,包含一個正整數k。(1 ≤ k ≤ 46)

【輸出】
輸出一行,包含一個正整數,表示菲波那契數列中第k個數的大小。

【輸入樣例】
19
【輸出樣例】
4181
1071:菲波那契數 技術分享圖片
1159:斐波那契數列

時間限制: 1000 ms         內存限制: 65536 KB
提交數: 7019     通過數: 4962 
【題目描述】
用遞歸函數輸出斐波那契數列第n項。0,1,1,2,3,5,8,13……

【輸入】
一個正整數n,表示第n項。

【輸出】
第n項是多少。

【輸入樣例】
3
【輸出樣例】
1
1159:斐波那契數列 技術分享圖片
1188:菲波那契數列(2)

時間限制: 1000 ms         內存限制: 65536 KB
提交數: 8702     通過數: 3136 
【題目描述】
菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為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
1188:菲波那契數列 技術分享圖片
1201:菲波那契數列

時間限制: 1000 ms         內存限制: 65536 KB
提交數: 5051     通過數: 3014 
【題目描述】
菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為1,接下來每個數都等於前面2個數之和。

給出一個正整數a,要求菲波那契數列中第a個數是多少。

【輸入】
第1行是測試數據的組數n,後面跟著n行輸入。每組測試數據占1行,包括一個正整數a(1≤a≤20)。

【輸出】
輸出有n行,每行輸出對應一個輸入。輸出應是一個正整數,為菲波那契數列中第a個數的大小。

【輸入樣例】
4
5
2
19
1
【輸出樣例】
5
1
4181
1
1201:菲波那契數列 技術分享圖片
1642: 【例 2】Fibonacci 第 n 項

時間限制: 1000 ms         內存限制: 524288 KB
提交數: 75     通過數: 22 
【題目描述】
大家都知道 Fibonacci 數列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2 。

現在問題很簡單,輸入 nn 和 mm,求 fnmodmfnmodm。

【輸入】
輸入 n,mn,m。

【輸出】
輸出 fnmodmfnmodm。

【輸入樣例】
5 1000
【輸出樣例】
5
【提示】
數據範圍與提示:

對於 100% 的數據, 1≤n≤2×109,1≤m≤109+10。
1642: 【例 2】Fibonacci 第 n 項 技術分享圖片
1643:【例 3】Fibonacci 前 n 項和

時間限制: 1000 ms         內存限制: 524288 KB
提交數: 34     通過數: 22 
【題目描述】
大家都知道 Fibonacci 數列吧,f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2f1=1,f2=1,f3=2,f4=3,…,fn=fn−1+fn−2 。

現在問題很簡單,輸入 nn 和 mm,求 {fn}{fn} 的前 nn 項和 SnmodmSnmodm。

【輸入】
輸入 n,mn,m。

【輸出】
輸出前 nn 項和 SnmodmSnmodm。

【輸入樣例】
5 1000
【輸出樣例】
12
【提示】
數據範圍與提示:

對於 100% 的數據, 1≤n≤2×109,1≤m≤109+10。
1643:【例 3】Fibonacci 前 n 項和 技術分享圖片
1644:【例 4】佳佳的 Fibonacci

時間限制: 1000 ms         內存限制: 524288 KB
提交數: 28     通過數: 13 
【題目描述】
佳佳對數學,尤其對數列十分感興趣。在研究完 Fibonacci 數列後,他創造出許多稀奇古怪的數列。例如用 S(n)S(n) 表示 Fibonacci 前 nn 項和 modmmodm 的值,即 S(n)=(F1+F2+...+Fn)modmS(n)=(F1+F2+...+Fn)modm,其中 F1=F2=1,Fi=Fi−1+Fi−2F1=F2=1,Fi=Fi−1+Fi−2 。可這對佳佳來說還是小菜一碟。

終於,她找到了一個自己解決不了的問題。用 T(n)=(F1+2F2+3F3+...+nFn)modmT(n)=(F1+2F2+3F3+...+nFn)modm 表示 Fibonacci 數列前 nn 項變形後的和 modmmodm 的值。

現在佳佳告訴你了一個 nn 和 mm,請求出 T(n)T(n) 的值。

【輸入】
輸入數據包括一行,兩個用空格隔開的整數 n,mn,m。

【輸出】
僅一行,T(n)T(n) 的值。

【輸入樣例】
5 5
【輸出樣例】
1
【提示】
樣例解釋

T(5)=(1+2×1+3×2+4×3+5×5)mod5=1T(5)=(1+2×1+3×2+4×3+5×5)mod5=1
數據範圍與提示:

對於 30% 的數據,1≤n≤1000;

對於 60% 的數據,1≤m≤1000;

對於 100% 的數據,1≤n,m≤231−1
1644:【例 4】佳佳的 Fibonacci 技術分享圖片
1645:Fibonacci

時間限制: 1000 ms         內存限制: 524288 KB
提交數: 35     通過數: 24 
【題目描述】
原題來自:POJ 3070

我們知道斐波那契數列 F0=0,F1=1,Fn=Fn−1+Fn−2。

求 Fnmod104 。

【輸入】
多組數據,每組數據一行,一個整數 nn。

輸入以 −1−1 結束。

【輸出】
對於每組數據,輸出 Fnmod104 。

【輸入樣例】
0
9
999999999
1000000000
-1
【輸出樣例】
0
34
626
6875
【提示】
數據範圍與提示:

對於全部數據,0≤n≤109 
1645:Fibonacci

己解決部分程序代碼

技術分享圖片
#include<iostream>
using namespace std;

int main(){
    int k,a[50];
    cin>>k;
    a[1]=1,a[2]=1;
    for(int i=3;i<=k;i++) 
        a[i]=a[i-1]+a[i-2];
    cout<<a[k];
    return 0;
}
1071

技術分享圖片
#include<iostream>
using namespace std;
int fblq(int n)
{
    if(n==1)return 0;
    if(n==2)return 1;
    return fblq(n-1)+fblq(n-2);
}
int main(){
    int n;
    cin>>n;
    cout<<fblq(n);
    return 0;
}
1159 技術分享圖片
#include<iostream>
using namespace std;
int a[1000001],b[100];
int main(){
    int n,max=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        if(b[i]>max)max=b[i];
    }
    a[1]=a[2]=1;
    for(int i=3;i<=max;i++)
    a[i]=(a[i-1]+a[i-2])%1000;
    for(int i=1;i<=n;i++)cout<<a[b[i]]<<\n;
    
    return 0;
}
1188 技術分享圖片
#include<iostream>
using namespace std;
int a[21],b[10000];
int main()
{
    int n,max=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>b[i];
        if(max<b[i])max=b[i];
    }
    a[1]=1,a[2]=1;
    for(int i=3;i<=max;i++)a[i]=a[i-1]+a[i-2];
    for(int i=1;i<=n;i++)cout<<a[b[i]]<<endl;    
     return 0;
}
1201 技術分享圖片
#include<iostream>
using namespace std;
long long const mxn=20000011;
long long n,m,a[mxn];
long long fb(long long n)
{
    if(n==1||n==2)return 1;
    if(n>=mxn){
        long long t1=fb(n/2)%m,t2;
        if(n%2)t2=fb(n/2+1)%m,t1=(t1*t1+t2*t2)%m;
        else t2=fb(n/2-1),t1=(t1*t1+2*t1*t2)%m;
        return t1;
    }
    else
    {
        if(a[n]==0)
        {
            long long t1=fb(n/2)%m,t2;
            if(n%2)t2=fb(n/2+1)%m,a[n]=(t1*t1+t2*t2)%m;
            else t2=fb(n/2-1),a[n]=(t1*t1+2*t1*t2)%m;
        }
        return a[n];
    }
}
int main()
{
    cin>>n>>m;
    cout<<fb(n);
    return 0;
 } 
1642

關於"斐波那契數列"你能做到哪一步?