ber_ker 2023-08-22 09:58 采纳率: 44.4%
浏览 3
已结题

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条回答 默认 最新

  • _L.Y.H._ 2023-08-22 11: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月30日
  • 已采纳回答 8月22日
  • 创建了问题 8月22日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据