角谷猜想内容:任意个自然数,若为偶数则除以2,若为奇数则乘以3加1,得到一个新的自然数,按照这样的计算方法计算下去,若干次后得到的结果必然为1.写程序对角谷猜想正确性验证。
思路一:
#include<iostream>
using namespace std;
int main() {
int n;
cin>>n;
while(n!=1) {
if(n%2==0)
{
n=n/2;
cout<<n<<" ";
}
else {
n=n*3+1;
cout<<n<<" ";
}
}
return 0;
}
思路二:设定一个阈值以规定循环的上限次数,如果循环在阈值范围内结束,则说明该数在给定范围内符合角谷猜想;如果超过了预先设定的阈值,则说明要调整阈值的选取。这种方法只能验证角谷猜想的正确性,而不能验证其错误性,因为无论怎么样选取阈值,该阈值都是有穷大的数。设置循环上限(阈值)的目的只是为了防止由于验证内容的不正确而导致程序陷入死循环当中。
#include<iostream>
using namespace std;
void provejiaogu(int n) {
int count=1;
while(n!=1 && count<=1000) {
if(n%2==0)
{
n=n/2;
cout<<n<<" ";
}
else {
n=n*3+1;
cout<<n<<" ";
}
count++;
}
if(count<1000 && n==1)
cout<<endl<<"yes!"<<endl;
}
int main() {
int n;
cin>>n;
provejiaogu(n);
return 0;
}