0
已解决
3683 卡拉兹猜想(callatz)
题目描述 Description
卡拉兹在 1950年的世界数学家大会上公布了著名的卡拉兹猜想,即对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,甚至有人说这是一个阴谋,是在蓄意延缓美国数学的发展和进步。
同学们,对于给定的任一不超过 1000的正整数 n,请计算需要多少步(砍几下)才能得到 n=1。
输入描述 Input Description
输入只有一行,一个正整数 n。
输出描述 Output Description
输出一个正整数 k,表示需要 k步才能得到 n=1。
样例输入 Sample Input
3
样例输出 Sample Output
5
数据范围及提示 Data Size & Hint
对于100%的数据:1≤n≤1000
为什么用死循环只得90分,而用普通的while(n!=1)却得了满分呢
#include<iostream>
using namespace std;
int n,cnt=0;
int main(){
cin>>n;
while(true){
cnt++;
if(n%2==0){
n=n/2;
}
else if(n%2==1){
n=(n*3+1)/2;
}
if(n==1){
cout<<cnt;
break;
}
}
return 0;
}
