哪位大佬帮我看一下为什么超时了

B2077 角谷猜想

zzy20131010 @ 2024-02-18 12:20:15

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;

    cin>>n;

    if(n==1)
    {
        cout<<"End";
        return 0; 
    }
    else
    {
        for(int i=1;n!=1;i++)
        {
            if(n%2==0)
            {
                cout<<n<<"/2="<<n/2;
                n=n/2; 
            }
            else
            {
                cout<<n<<"*3+1="<<n*3+1;
            } 
        }
        cout<<"End";
    }
} 

by OIer_bcx_ @ 2024-02-18 12:38:27

   else
   {
       cout<<n<<"*3+1="<<n*3+1;
       n=n*3+1;
   } 

by MspAInt @ 2024-02-18 12:40:39

@zzy20131010

这里有三个问题:

  1. cout<<n<<"*3+1="<<n*3+1; 中你仅仅输出了 n*3+1 而没有更新 n
  2. 你在输出过程时没有换行。
  3. 显然 n 在计算时可能超过 int 表达范围,因此使用 long long 类型。

改正以上三个错误可以通过:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n;

    cin>>n;

    if(n==1)
    {
        cout<<"End";
        return 0; 
    }
    else
    {
        for(int i=1;n!=1;i++)
        {
            if(n%2==0)
            {
                cout<<n<<"/2="<<n/2<<'\n';
                n=n/2; 
            }
            else
            {
                cout<<n<<"*3+1="<<n*3+1<<'\n';
                n=n*3+1;
            } 
        }
        cout<<"End";
    }
} 

by lf004 @ 2024-02-20 10:51:40

for循环里的else中输出完要更新n


|