码迷,mamicode.com
首页 > 其他好文 > 详细

13. 3n + 1 问题

时间:2019-12-29 00:53:50      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:操作   并且   ace   pre   奇数   iostream   类型   int   main   

题目:

猜想:对于任意大于 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 问题

标签:操作   并且   ace   pre   奇数   iostream   类型   int   main   

原文地址:https://www.cnblogs.com/Hello-Nolan/p/12113578.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!