PAT乙级1005继续3n+1思想(python实现)

题目描述

在这里插入图片描述

代码实现

input_number = int(input())

# 记录每个数字计算的过程
def record_3n(calculate_number):
    record_list = []
    while True:
        if calculate_number == 1:
            break
        # 3n+1思想
        calculate_number = calculate_number//2 if calculate_number%2 ==0 else (calculate_number*3+1)//2
        record_list.append(calculate_number)
    # 去除计算中出现的重复元素
    return set(record_list)

input_list = input().split()
# 输入字符串转换成整数类型
each_number = set([int(number) for number in input_list])

while input_number:
    for number in input_list:
        # 记录每个数字的3n+1计算出现的数字
        record_result = record_3n(int(number))
        # 记录不在record_3n中的结果
        each_number = each_number.difference(record_result)
        input_number -= 1

result = list(each_number)
# 由大到小排序
result.sort(reverse=True)
result = [str(i) for i in result]
print(' '.join(result))

知识点总结

不重复元素的特点非常符合set的特征,利用set的特性实现元素不重复,比自己写方法快捷~
常见set用法

  • 添加元素 s.add( x )
  • 更新元素 s.update( x )
  • 移除元素 s.remove( x )或者是 s.discard( x )、 s.pop()
  • 计算元素个数 len(s)
  • 清空集合 s.clear()

参考

Python3 集合 菜鸟教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值