题解 B2077 【角谷猜想】

· · 题解

题解

考虑使用 \verb!while! 循环解题。当 n=1 时,就退出;否则,

最后使用 \verb!puts! 函数(它可以用来输出一个 C风格字符串并换行),输出 \verb!End! 。如 puts("End")

在 C++ 的表达式的计算中,它是先计算完表达式的值后再返回的。特别地,对于赋值语句(例如 t=3*n+1 ),那么它会先将 3\times n+1 的结果计算出来,赋值到 t 上,然后将 \bm t 的值作为表达式的返回值。因此我们可以这样简化一下代码。

参考代码

#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l,END##i=r;i<=END##i;++i)
#define dn(r,l,i) for(int i=r,END##i=l;i>=END##i;--i)
using namespace std;
typedef long long i64;
const int INF =2147483647;
int n,t;
int main(){
    scanf("%d",&n); while(n!=1){
        if(n%2==1) printf("%d*3+1=%d\n",n,t=n*3+1);
        else       printf("%d/2=%d\n",n,t=n/2);
        n=t;
    }
    puts("End");
    return 0;
}