问题标题: 酷町堂:3683 卡拉兹猜想(callatz)

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者

3683   卡拉兹猜想(callatz)

经验值:800 时间限制:1000毫秒

合肥市第35届**学竞赛

不许抄袭,一旦发现,直接清空经验!

题目描述 Desc**ption

卡拉兹在 1950年的世界数学家大会上公布了著名的卡拉兹猜想,即对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,甚至有人说这是一个阴谋,是在蓄意延缓**数学的发展和进步。

同学们,对于给定的任一不超过 1000的正整数 n,请计算需要多少步(砍几下)才能得到 n=1。

输入描述 Input Desc**ption

输入只有一行,一个正整数 n。

输出描述 Output Desc**ption

输出一个正整数 k,表示需要 k步才能得到 n=1。

样例输入 Sample Input

3

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

对于100%的数据:1≤n≤1000

 

 

错误代码:

#include<bits/stdc++.h>
using name** std;
long long a,b;
int main(){
    cin>>a;
    while(1){
        if(a%2==0){
            b++;
            a=a/2;
        }else if(a%2==1){
            b++;
            a*=3;
            a=a/2;    
        }
        if(a==1){
            break;
        }
    }
    cout<<b;
    ret**n 0;
}
 


0
已采纳
王文博
王文博
缔造者之神
缔造者之神
    for(;;)
    {
        if(n==1)
        {
            cout<<cnt;
            break;
        }
        if(n%2==0) n/=2;
        else
        {
            n*=3;
            n+=1;
            n/=2;
        }
        cnt++;
    }

望采纳!

我要回答