题目描述
代码实现
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()