13. 3n + 1 问题
Posted hello-nolan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了13. 3n + 1 问题相关的知识,希望对你有一定的参考价值。
题目:
猜想:对于任意大于 1 的自然数 n ,若 n 为奇数, 则将 n 变为 3 n + 1 , 否则变为 n 的一半。经过若干次这样的变换,一定会使 n 变为 1.
输入 n ,输出变换的次数。n <= 10^9。
样例输入:
3
样例输出:
7
思路:
当结果不为1时进行循环,用计数器来计算次数。并且需要注意,对于很大的整数进行乘法操作,会导致中间结果溢出,因此需要用 long long 类型来存储该整数。
代码:
#include <iostream>
using namespace std;
int main()
{
int n = 0, cnt = 0;
cin >> n;
long long = n;
while (n != 1) {
if (n % 2 == 0) {
n /= 2;
} else {
n = (3 * n + 1);
}
++cnt;
}
cout << cnt << endl;
return 0;
}
以上是关于13. 3n + 1 问题的主要内容,如果未能解决你的问题,请参考以下文章
PCL异常处理:pcl 1.8.13rdpartyoostincludeoost-1_64oost ypeofmsvc ypeof_impl.hpp(125): error(代码片段