角谷猜想(冰雹猜想)

Description

又称冰雹猜想,它首先流传于美国,不久传到欧洲,后来由一位叫角谷的日本人带到亚洲,因此称为角谷猜想。角谷猜想是这样的: 任意给定一个自然数n,当n是偶数时,将它除以2; 当n是奇数时,将它变为3n+1,..., 若干步后,总会得到1。我们要解决的问题: 对于给定的n (1<n<=10^9),求出数字序列中第一次出现1的位置。

Sample Input

6

Sample Output

9

HINT

6 3 10 5 16 8 4 2 1

python解法

n = int(input("请输入一个正整数: "))  # 从用户处获取一个正整数输入
count = 1  # 初始化计数器为1
while n != 1:  # 当n不等于1时,继续循环
    if n % 2:  # 如果n是奇数
        n = 3 * n + 1  # 执行n = 3n + 1操作
    else:  # 如果n是偶数
        n = n / 2  # 执行n = n / 2操作,使用整数除法
    count += 1  # 计数器加1
print(count)

c++解法

#include<bits/stdc++.h>  // 引入C++标准库的头文件
using namespace std;

int main() {
    int n, count = 1;  // 定义整数n和计数器count,初始化count为1
    cin >> n;  // 从标准输入读取整数n

    while (n != 1) {  // 当n不等于1时,执行循环
        if (n % 2) {  // 如果n是奇数
            n = 3 * n + 1;  // 根据Collatz猜想,执行n = 3n + 1操作
        } else {  // 如果n是偶数
            n /= 2;  // 根据Collatz猜想,执行n = n / 2操作
        }
        count++;  // 计数器加1,记录操作次数
    }
    cout << count << endl;  // 输出操作次数

    return 0;  // 程序正常结束,返回0
}
如果您有更优的解法,欢迎在评论区一起交流噢~
阅读剩余
THE END