1. 程式人生 > >Bailian2758 菲波那契數列(2)【遞推】

Bailian2758 菲波那契數列(2)【遞推】

2758:菲波那契數列(2)
總時間限制: 1000ms 記憶體限制: 65536kB
描述
菲波那契數列是指這樣的數列: 數列的第一個和第二個數都為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

問題連結Bailian2758 菲波那契數列(2)
問題描述

:(略)
問題分析
    簡單的遞推函式實現,不解釋。
程式說明:(略)
參考連結:(略)
題記:(略)。

AC的C語言程式如下:

/* Bailian2758 菲波那契數列(2) */

#include <stdio.h>

#define MOD 1000

int fib(int n)
{
    if(n == 1 || n == 2)
        return 1;
    else {
        int f1 = 1, f2 = 1, tmp, i;
        for(i = 3; i <= n; i++) {
            if((tmp = f1 + f2) >= MOD)
                tmp -= MOD;
            f1 = f2;
            f2 = tmp;
        }
        return f2;
    }
}

int main(void)
{
    int t, a;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &a);
        printf("%d\n", fib(a));
    }

    return 0;
}