-
题目描述:
-
对于一个数n,如果是偶数,就把n砍掉一半;如果是奇数,把n变成 3*n+ 1后砍掉一半,直到该数变为1为止。
请计算需要经过几步才能将n变到1,具体可见样例。
-
输入:
-
测试包含多个用例,每个用例包含一个整数n,当n为0 时表示输入结束。(1<=n<=10000)
-
输出:
-
对于每组测试用例请输出一个数,表示需要经过的步数,每组输出占一行。
-
样例输入:
-
3 1 0
-
样例输出:
-
5 0
#include<stdio.h>
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int count=0;
int flag=0;
while(1){
if(n==0) return 0;
else if(n==1){
switch (flag){
case 0: printf("%d\n",flag);
break;
case 1:printf("%d\n",count);
break;
}
break;
}
if(n%2==0){
n/=2;
count++;
flag=1;
}else{
n=3*n+1;
n/=2;
count++;
flag=1;
}
}
}
return 0;
}
昨晚收工的时候,打开了这题。说在回去的路上可以想清楚,然后回去就写了。不知道是我腿太长(逃。。。)还是路太短,似乎还没想就到了。
晚上躺床上了,再想一想早上起来就写了,可我这个脑壳,咋就思绪前进不了呢。于是用在手机上写了下来。
这个程序的结构 用了上一题的结构,我都忘记switch case和break的关系了。
话说我觉得有点奇怪啊,为什么switch case的设定是只有没有break就会一直执行,那还要后面的case干嘛。好吧,我现在才思考这个问题真的反射福(逃。。。)太长了。
啧啧啧。
今天我的朋友跟我讲说“我真心希望你不管是选择升学还是工作,都能去更厉害的层次。”(后面还跟了一个qq表情里的那个赞的小熊)
突如其来的真心话,让我愣了一下。然后是觉得温暖。
上一次他叮嘱(算是叮嘱吧)我,还是这个学期开学,刚刚实训回来,朋友突然说要来找我玩,在去吃饭的路上,突然跟我讲说你要好好学习哦。
我当时开心的答应着,之后就抛在了脑后,啧啧啧。
下一题吧。