思路:找出了**列表中0的下标(没有给礼物的人)以及没有在列表中出现的数字(没有被给礼物的人)**之后,在找出一个不会有重复的排序。
n = int(input())
a = [*map(int, input().split())]
nogive = sorted([i + 1 for i in range(n) if a[i]==0])
nogiven = sorted(list(set(range(n+1))-set(a)))
while any(nogive[i]==nogiven[i] for i in range(len(nogive))):
nogiven = nogiven[1:] + [nogiven[0]]
while nogiven:
if nogiven[-1]==nogive[-1]:
a[nogive.pop(0)-1] = nogiven.pop()
else:
a[nogive.pop()-1] = nogiven.pop()
print(*a)