【题目来源】
洛谷:B2077 角谷猜想 - 洛谷
【题目描述】
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘 \(3\) 加 \(1\),如果是偶数,则除以 \(2\),得到的结果再按照上述规则重复处理,最终总能够得到 \(1\)。如,假定初始整数为 \(5\),计算过程分别为 \(16\) 、 \(8\) 、 \(4\) 、 \(2\) 、 \(1\)。
程序要求输入一个整数,将经过处理得到 \(1\) 的过程输出来。
【输入】
一个正整数 \(N(N \le 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;
long long n; // 输入的数字int main()
{cin >> n; // 输入正整数nwhile (true) // 无限循环{if (n == 1) // 如果n变为1{break; // 结束循环}if (n % 2 == 1) // 如果n是奇数{cout << n << "*3+1=" << n * 3 + 1 << endl; // 输出计算过程n = n * 3 + 1; // 3n+1}else // 如果n是偶数{cout << n << "/2=" << n / 2 << endl; // 输出计算过程n = n / 2; // n/2}}cout << "End" << endl; // 输出结束标记return 0;
}
【运行结果】
5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
