カラッツ予想:
正の整数nの場合、偶数の場合は半分に、奇数の場合は(3n + 1)を半分にカットします。これは繰り返し繰り返され、最終的に、特定のステップでn = 1を取得する必要があります。Karazは1950年の世界数学者会議でこの推測を発表しました。当時、イェール大学の教師と生徒は、この一見愚かな、素朴な命題を必死に証明したいという動機があったと言われています。 +1)、これは陰謀だと言う人もいるように、カラズはアメリカの数学教育と科学研究の進歩を故意に遅らせています...
今日のトピックはカラズの推測を証明することではなく、与えられた1000に対してn = 1にするために必要なステップ数(数回のカット)の正の整数nは、単純に数えますか?
入力フォーマット:
各テスト入力には、正の整数nの値を与える1つのテストケースが含まれます。
出力フォーマット:
nから1までの計算に必要なステップ数が出力されます。
入力例:
3
出力例:
5
アイデア
この質問の場合は、質問のアイデアに従ってください。偶数の場合、n = n / 2、奇数の場合、n =(3 * n + 1)/ 2、n == 1になるまでループを続けますそれを打ち破って、操作するたびにcnt ++を覚えて、最後にcntの値を出力することは必要なステップ数です。
コード
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;
int main(){
int n, cnt;
cnt = 0;
scanf("%d", &n);
while(1){
if(n==1) break;
if(n%2==0){
n = n/2;
cnt++;
}
else{
n = (3*n+1)/2;
cnt++;
}
}
printf("%d", cnt);
return 0;
}