斐波那契数列规律题

斐波那契数列(非递归版,递归版会超时,这个好)
斐波那契数列
Problem:85
Time Limit:5000ms
Memory Limit:65536K
Description
计算斐波那契数列的值!该数列为1 1 2 3 5 8 13 21 …
Input
有多组数据,每组1行,用N表示,1 <= N <= 50。
Output
输出Fibonacci(N)的值!
Sample Input
1
2
3
Sample Output
1
1
2
Hint
Source

#include <bits/stdc++.h>
//非递归版
using namespace std;
long long F(int n)
{
    long long f1=1;
    long long f2=1;
    long long F;
    for(int i=3;i<=n;i++)
    {
        F=f1+f2;
        f1=f2;
        f2=F;
    }
    return F;
}
int main()
{
    int n;
    long long ans=0;
    while(cin>>n)
    {
        if(n==1||n==2)
        {
            printf("1\n");
        }
        else
        {
        ans=F(n);
        printf("%lld\n",ans);
        }
    }
    return 0;
}

斐波那契的整除
Problem:115
Time Limit:1000ms
Memory Limit:65536K
Description
已知斐波那契数列有如下递归定义,f(1)=1,f(2)=1, 且n>=3,f(n)=f(n-1)+f(n-2),它的前几项可以表示为1, 1,2 ,3 ,5 ,8,13,21,34…,现在的问题是想知道f(n)的值是否能被3和4整除,你知道吗?
Input
输入数据有若干组,每组数据包含一个整数n(1< n <1000000000)。
Output
对应每组数据n,若 f(n)能被3整除,则输出“3”; 若f(n) 能被4整除,则输出“4”;如果能被12整除,输出“YES”;否则输出“NO”。
Sample Input
4
6
7
12
Sample Output
3
4
NO
YES
Hint
(斐波那契数重要性质:gcd(fn,fm)=f(gcd(n,m)),给出数列前几项1,1,2,3,5,8,13…

f4=3,f6=8,由以上性质可得,如果4能整除n,那么3=f4能整除fn;同理可得,如果6能整除n,那么8=f6能整除fn,即4能整除fn;)打表找规律的题

#include <bits/stdc++.h>
using namespace std;
int n;
int main()
{
    while(cin>>n)
    {
        if(n%12==0)printf("YES\n");
        else
        {
            if(n%4==0)printf("3\n");
            else if(n%6==0)printf("4\n");
            else printf("NO\n");
        }
    }
    return 0;
}

求斐波那契数函数版
Problem:827
Time Limit:1000ms
Memory Limit:65536K
Description
根据斐波那契递推关系,求解斐波那契数值
斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)
Input
输入数据有多组,一个正整数表示要求取的第几项斐波那契数值;(2 <= n <= 40)
Output
输出斐波那契数值
Sample Input
5
8
10
20
Sample Output
5
21
55
6765
Hint
Source

#include <bits/stdc++.h>

using namespace std;
int f(int a)
{
    if(a==1)
    {
        return 1;
    }
    if(a==2)
    {
        return 1;
    }
    return f(a-1)+f(a-2);
}
int main()
{
    int n,ans=0;
    while(cin>>n)
    {
        cout<<f(n)<<endl;
    }
    return 0;
}

斐波那契数列取模问题
需要使用循环节

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值