角谷猜想,想必许多人都听过吧!
今天,我们就要用c++来解决角谷猜想,是不是感觉有点难?
我们一起来看看吧!!!
题目
角谷猜想又称冰雹猜想,任意写出一个自然数 n,并且按照以下的规律进行变换:
如果是个奇数,则下一步变成 3n+1;
如果是个偶数,则下一步变成 n/2;
则这个运算最后结果都会为 1。
你认为这个猜想正确吗?同学们可以尝试想办法去检验。
输入
一个自然数 n。
输出
第一行输出变换的次数。
接下来一行按照变换顺序输出每次变换以后的值,每两个数中间用一个空格隔开(输出包含初始的数)。
样例
输入
22
输出
15 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
提示
数据范围
1≤n<10^9
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n,cnt=0;//long long类型,请看数据范围你就明白了
cin>>n;//输入
long long m=n;
while(n!=1){
if(n%2==1){
n=n*3+1;
cnt++;//个数+1
}else{
n=n/2;
cnt++;//个数+1
}
}//开始循环,注意,循环的是次数
cout<<cnt<<endl;
cout<<m<<" ";
while(m!=1){
if(m%2==1){
m=m*3+1;
}else{
m=m/2;
}
cout<<m<<" ";//输出过程
}//继续循环,注意,循环的是过程
return 0;
}
思路就在代码里面了,如果还有更简单的方法,请在下方评论!!!
最后说一句,我是一名才学两年c++的小学生,请不要抄袭代码!!!
(现在已经是中学生了(于2022年9月1日更正))
效果显示: