Fibonacci Again解题报告

题目摘要:Thereare another kind of Fibonacci numbers: F(0) = 7, F(1) = 11, F(n) = F(n-1) +F(n-2) (n>=2).

题目大意:另外一种斐波那契数列,第一项为7,第二项为11。

输入输出要求

Input

Input consists of a sequence of lines, eachcontaining an integer n. (n < 1,000,000).

 

Output

Print the word "yes" if 3 divideevenly into F(n).
Print the word "no" if not.

 

输入输出样例

Sample Input

0

1

2

3

4

5

 

Sample Output

no

no

yes

no

no

no

 

解题思路:咳咳,找规律,8个一循环。

代码

#include<iostream>

using namespace std;

long long f(int n)

{

    long long a=7;

    long long b=11;

    long long c;

    int i;

    if(n==0)

        return 7;

    else if(n==1)

        return 11;

    else

    {

        for(i=2;i<=n;i++)

        {

            c=a+b;

            a=b;

            b=c;

        }

    }

    return b;

}

int main()

{

    int n;

    while(cin>>n)

    {

        n%=8;

         if(f(n)%3==0)

            cout<<"yes"<<endl;

        else

            cout<<"no"<<endl;

    }

    return 0;

}

解题感想:最先想到直接用递归求数列,结果发现n能取100万,递归肯定递不出来,所以用了另一种方法求f(n),开一个循环就好。交了代码WA掉,怎么也没想明白错在哪,后来将f(n)输出看看,发现n去90以后结果就变负值了,原因是long long也不够存f(n)的值。这样的话只能再换思路了,因为题中是对3取余,所以发现结果是8个一循环,将n对8取余一下就好了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值