输入数据包含多个用例,每个用例首先包含一个整数n,然后接下来一行有n个整数a[i],其中: 1<=n<=500, 1<a[i]<=1000
请计算并输出数组a中包含的关键数,并按照其输入顺序的逆序输出,每个用例输出占一行。
3 3 8 4 5 3 8 4 7 15 5 3 8 4 15 7 0
3 15 7 3 7 15 3
def generate_sequence(n): """生成xxx定律序列""" if not 1 < n <= 1000: return [] sequence = [] seen = set() # 防止循环 while n != 1 and n not in seen: sequence.append(n) seen.add(n) if n % 2 == 0: n = n // 2 else: n = 3 * n + 1 n = n // 2 # 修改:加入这一步 sequence.append(n) # 添加最后一个数 return sequence def find_key_numbers(numbers): """查找关键数""" key_nums = [] covered = set() # 按原始顺序生成序列 for num in numbers: seq = generate_sequence(num) # 将除第一个数外的所有数加入覆盖集 for x in seq[1:]: covered.add(x) # 从后往前检查关键数 for num in reversed(numbers): if num not in covered: key_nums.append(num) return " ".join(map(str, key_nums)) def main(): while True: try: n = int(input()) if not 1 <= n <= 500: continue numbers = list(map(int, input().split())) if len(numbers) != n&nbs***bsp;not all(1 < x <= 1000 for x in numbers): continue print(find_key_numbers(numbers)) except EOFError: break if __name__ == "__main__": main()