PAT-B 1001 害死人不偿命的(3n+1)猜想 (15)

博主开始挑战PAT乙级题目,分享了1001题——害死人不偿命的(3n+1)猜想的解题心得。问题在于原本代码中不必要的while(scanf())循环,实际只需处理一次输入。文章提到了PAT的排名列表能链接到大神的博客,提供了宝贵的解题资源。AC代码中,博主采用了判断奇偶的优化技巧n&1,并将相同处理步骤合并,简化了代码。
摘要由CSDN通过智能技术生成

开始做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 ++;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值