葛成功之路 2020-03-27 19:49 采纳率: 87.5%
浏览 184
已采纳

请问这个代码逻辑上有什么问题吗?

有一个序列满足:

F(0) = 7,
F(1) = 11,
F(n) = F(n-1) + F(n-2) (n>=2).的值,
输入 n (0<=n<=10^6) 要求判断能被 3 整除的 F (n)

输入描述
多行输入,每行一个正整数

输出描述
每行一个提示信息,若 F (n) 能被 3 整除,输出 “yes”,否则,输出 “no”

样例输入
0

1

2

3

4

5

样例输出
no

no

yes

no

no

no

#include<iostream>
using namespace std;
int main(){
    int w,e1=7,e2=11,t,i;
    while(cin>>w){{
        if(w==0)
        t=7;
        if(w==1)
        t=11;
        if(w>=2){
        for(i=w;i>1;i--)
        e1=e1+e2;
        e2=e2+e1;
        t=e1;}}
        if(t%3==0)
        cout<<"yes"<<endl;
        if(t%3!=0)
        cout<<"no"<<endl;
    }
    return 0;
}
  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-28 00:15
    关注
    #include<iostream>
    using namespace std;
    int main(){
        int w,e1=7,e2=11,t,i;
        while(cin>>w)
        {
            e1=7,e2=11;//这里
            {
                if(w==0)
                    t=7;
                if(w==1)
                    t=11;
                if(w>=2){
                    for(i=w;i>0;i--)//这里
                    {
                        e2=e1+e2;//这里
                        e1=e2-e1; //这里
                    }
                    t=e1;
                }
            }
            if(t%3==0)
                cout<<"yes"<<endl;
            if(t%3!=0)
                cout<<"no"<<endl;
        }
        return 0;
    }
    

    补充下,题目要求N最大是1000000,那么计算e1 e2再判断,会导致e1 e2太大,超过int范围
    所以可以在
    e2=e1+e2;
    e1=e2-e1;
    下面加上2行
    e1=e1%3;
    e2=e2%3;
    这样就不怕太大了。

    另外,你加下企俄群4129094,然后留言找老马。以后有问题可以直接问

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3