方法一:
1、按照题目意思,当一个数可以被其他数覆盖,那么这个数就不是关键数,否则就是关键数。
2、标记所有被覆盖的数,初始状态假设所有合法范围内的数都是关键数,标记为0。
3、计算每个数会覆盖哪些数,将覆盖的数标记为1,表示这个数可以被覆盖,不是关键数。
4、计算完了每个数会被覆盖之后,将没有被覆盖的数,也就是关键数,挑选出来。
5、将挑选出来的数按照从大到小排序
6、最后一个数后面没有空格
7、如果没有以下代码,有两个测试点过不了,数组会越界
if n <= 100
详细代码:
a = int(input())
m = list(map(int,input().split()))
visit = [0 for i in range(101)]
data = []
for n in m:
while n > 1:
if n % 2 == 1:
n = (n * 3 + 1)//2
else:
n = n // 2
if n <= 100:
visit[n] = 1
result = []
for n in m:
n = int(n)
if visit[n] == 0:
result.append(n)
result.sort()
result.reverse()
for i in range(0,len(result)-1):
print(result[i],end=' ')
print(result[len(result)-1])
方法二:
1、按照题目意思,当一个数可以被其他数覆盖,那么这个数就不是关键数,否则就是关键数。
2、计算每个数的被覆盖数,将每个覆盖数放到list里面。
3、计算完了每个数会被覆盖之后,将没有被覆盖的数,也就是关键数,挑选出来。
4、将挑选出来的数按照从大到小排序
5、最后一个数后面没有空格
a = int(input())
m = list(map(int,input().split()))
data = []
for n in m:
while n > 1:
if n % 2 == 1:
n = (n * 3 + 1)//2
else:
n = n // 2
if n not in data:
data.append(n)
result = []
for n in m:
n = int(n)
if n not in data:
result.append(n)
result.sort()
result.reverse()
for i in range(0,len(result)-1):
print(result[i],end=' ')
print(result[len(result)-1])