zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    解决sql2008附加不了2005的数据库文件的问题
    方阵
    台阶问题
    螺旋矩阵
    兔子问题
    九乘九乘法口诀
    选猴王
    拿鸡蛋问题
    软工个人作业
    小学四则运算法则训练
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12113578.html
Copyright © 2011-2022 走看看