角谷静夫是日本东京大学数学教授,于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在内)。
20
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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!