问题标题: 酷町堂:市赛第三题

0
0
已解决
王子健
王子健
初级天翼
初级天翼
#include<stdio.h>
int main()
{
    int n,count=0;
    scanf("%d",&n);
    while(n!=1)
    {
        switch(n%2)
        {
            case 0;
            n=n/2;
            count++;
            break;
            case 1;
            n=(3*n+1)/2;
            break;
            default:break;
        }
    }
    printf("%d",count);
    return 0;
}

网上搜的代码,C语言的,有哪位大佬会c++语言,麻烦告知。

谢谢

(这次市赛要凉凉了)


0
已采纳
王浩然
王浩然
新手光能
新手光能

这个很简单啊,认为是除了第一题最简单的一题

直接while

 while(n!=1)
    {
        if(n%2==0)
            n/=2;
        else
            n=(3*n+1)/2;
        t++;
    }

 

0
范子扬
范子扬
高级守护
高级守护
int n,k;
int main()
{
    cin>>n;
    while(n!=1)
    {
        if(n%2==1){k++;n=(n*3+1)/2;}
        if(n%2==0){k++;n=n/2;}
    }
    cout<<k<<endl;
    return 0;
}

 

0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

void递归解决

f(n/2);

f((3*n-1)/2);

0
张舒斌
张舒斌
中级光能
中级光能

其实很简单啊,和千变万化总是“1”稍微有点像

while(n!=1)
{
    if(n%2==0) n/=2;
    else n=(n*3+1)/2;
    count++;
}
核心代码,具体思路参考千变万化总是“1”微课讲解

 

0
尹宗鑫
尹宗鑫
新手守护
新手守护
#include<iostream>
using namespace std;
int n,cnt=0;
int main(){
    cin>>n;
    while(n!=1){
        cnt++;
        if(n%2==0){
            n/=2;
        }else n=(n*3+1)/2;
    }
    cout<<cnt<<endl;
    return 0;
}
0
毛润宇
毛润宇
新手天翼
新手天翼

先while(n!=1),之后if(n%2==1);n=n/2;t++;然后if(n%2==1&&n!=1);n=(3*n+1)/2;t++;中间要用大括号。

毛润宇在2018-11-18 10:53:04追加了内容

望采纳!

我要回答