题目描述
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++;
}