角谷静夫是日本东京大学数学教授,于1930年提出该猜想。

角谷静夫的猜想

题目背景

角谷静夫是日本东京大学数学教授,于1930年提出该猜想。

遗憾的是该猜想迄今仍未被证明,我们只能利用计算机来验证它。

题目描述

给出一个正整数n,然后对这个数字n一直进行下面的操作:如果这个数字是奇数,那么将其乘 3 再加 1,否则除以 2。经过若干次循环后,最终都会回到 1。

角谷静夫认为:任意正整数都可以按照这样的方式变成 1,被称为“角谷猜想”。

例如当 $n$ 是 20,变化的过程是 [20, 10, 5, 16, 8, 4, 2, 1]。

根据给定的数字n,验证这个猜想。

输入格式

输入仅一行,一个正整数,表示n。

n≤MAX_INT

输出格式

你的程序需要输出一行,包含若干个空格隔开的整数,它们是从n变化到1的全过程(包括n和1在内)。

样例 #1

样例输入 #1

20

样例输出 #1

20 10 5 16 8 4 2 1

循环迭代,需要注意的是 n *3 +1可能会超出int范围,所以,需要用long类型来接收数据。
代码如下:

#include <iostream>
using namespace std;

int main()
{
    long n;
    cin >> n;
    cout << n;
    while(n!=1)
    {
        if(n%2==0)
            n/=2;
        else
            n = n*3+1;
        cout <<" "<<n;

    }
    return 0;
}

只要根据奇偶分别判断就好了

#include <iostream>
using namespace std;
int main()
{
    int n;
    cin>>n;
    do
    {
        cout<<n<<" ";
        if(n%2==0)
            n /= 2;
        else
            n = 3*n + 1;
    }while(n!=1);
    cout<<1<<endl;
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632