列一列(斐波那契数列)

题目描述

小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。尽管他计算非常精准,但很快他就弄混了自己的草稿纸,他找出了一些他计算的结果,但他忘记了这些都是数列中的第几项。

输入描述:

每行包括数列中的一项Ak(k<=100000)。

总行数T<=30。

输出描述:

对于每一项Ak,输出一行包括一个正整数k表示输入中数是数列的第几项。

输入

2
3
5
8
13

输出

2
3
4
5
6
#include <bits/stdc++.h>
using namespace std; 
const int P = 1000000000;
const int N = 100000;
int x, n, a[N+5], ans;
char str[N+5];
int main() 
{
    a[1] = 1;
    a[2] = 2;
    for (int i = 3; i <= N; ++i) 
    {
        a[i] = (a[i-1]+a[i-2])%P;
    }
    while (~scanf("%s",str)) 
    {
        int len=strlen(str);
        if (len<10) sscanf(str, "%d", &n);
        else sscanf(str+(len-9), "%d", &n);
        for (int i=1;i<= N;++i) 
        {
            if(a[i]==n) 
            {
                printf("%d
", i);
                break;
            }
        }
    }
    return 0;
}

2018-02-03 mod然后就能看出来了

原文地址:https://www.cnblogs.com/mayouyou/p/8409701.html