B1001 害死人不偿命的(3n+1)猜想

题目描述

n为奇数,将(3n+1)砍掉一半;->即 (3n+1)/2
n为偶数,将n砍掉一半;->即 n/2
测试任意不超过1000的正整数n,需要多少步才能得到n=1?

注意事项

有个问题:int n,count=1111;
这句话它的含义是令n和count均等于1111吗?
答:不对。n可以是任意数,但count=1111。
在这里插入图片描述
在这里插入图片描述

解题代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n,count=0;
   scanf("%d",&n);
   while(n!=1)
   {
       if(n%2==0)
       {
           n=n/2;
           count++;
       }
       else
       {
           n=(3*n+1)/2;
           count++;
       }
   }
   printf("%d",count);
   return 0;
}

改进:

原来的做法:
在if中判断为偶后给n赋值n/2,count++,否则else为奇,给n赋值3n+1,count++一次。
改进后:
在if-else中判断为奇偶后,count++。

while(n!=1)
   {
       if(n%2==0)
       {
           n=n/2; 
       }
       else
       {
           n=(3*n+1)/2;
       }
       count++;
   }
发布了8 篇原创文章 · 获赞 0 · 访问量 290

猜你喜欢

转载自blog.csdn.net/qq_40733888/article/details/103979042
今日推荐