开始做PAT乙级了,加油!
题目链接:1001 害死人不偿命的3n+1猜想
之前自己写的代码没有通过,原来是因为用了while(sacnf()),根本不需要,只需要输入一次就行了。我就想第一题怎么就这么难么……
PAT的排名列表的真好,好多大神公布自己的Blog地址,里面有很多的解题日志。
AC代码:
#include<stdio.h>
/* 奇偶的判断 */
int solve(int n)
{
int cnt = 0;
while(n != 1){
if(n%2){//奇数
n = (3*n+1)/2;
}else{
n = n/2;
}
cnt++;
}
return cnt;
}
int main(){
int n;
scanf("%d",&n);
printf("%d\n",solve(n));
return 0;
}
其中,看了luoluo大神的解题日志,有两点收获:
1. 判断奇偶的方法;n&1
2. 因为不管奇偶都要/2,所以可以这么写:把相同的处理部分写在同一步里面,使得代码更加的简洁。
while(n != 1){
if(n & 1)
n = 3*n + 1;
n /= 2;
ans ++;
}