ber_ker 2023-08-22 01:58 采纳率: 50%
浏览 4
已结题

c++超过时限,例题

1022:角谷猜想
查看提交统计提问
总时间限制: 1000ms 内存限制: 65536kB
描述
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16,8、4、2,1。
程序要求输入一个整数,将经过处理得到1的过程输出来。

输入
一个正整数N(N <= 2,000,000)
输出
从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。
样例输入
5
样例输出
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int N;
    cin>>N;
    while(N!=1)
    {
        if(N%2==0)
        {
        cout<<N<<"/2="<<N/2<<endl; 
            N=N/2;    
        }
        else
        {
            if(N%2==1)
            {
                cout<<N<<"*3+1="<<N*3+1<<endl;
                N=N*3+1;    
            }    
        }
    }
    while(N==1)
    {
        cout<<"End"<<endl; break;
    }
    return 0;
}

为超过时限

展开全部

  • 写回答

3条回答 默认 最新

  • lyh不会打代码 2023-08-22 03:06
    关注

    1.一个数字,非偶即奇。因此在else时,直接执行操作就好了。不用再判断
    2.因为N <= 2,000,000,所以要用longlong
    3.最后那个while根本没必要,直接输出“End”不就行了?

    
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        long long N;
        cin>>N;
        while(N!=1)
        {
            if(N%2==0)
            {
            cout<<N<<"/2="<<N/2<<endl; 
                N=N/2;    
            }
            else
            {
                    cout<<N<<"*3+1="<<N*3+1<<endl;
                    N=N*3+1;      
            }
        }
        cout<<"End"<<endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月22日
  • 创建了问题 8月22日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部