W3 school 菜鸟教程 我要自学网 信息学奥赛NOI 花哥的博客 不逼自己一把,怎知自己有多优秀——校长语录

关于"斐波那契数列"你能做到哪一步?

关于董永键老师一本通书的裴波那契数列你能做到哪一个?

反正我是没做完。

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

 

posted @ 2019-03-23 11:23  耍人  阅读(847)  评论(0编辑  收藏  举报