数组中,有两个数字只出现过一次,其余数字都出现两次,找出只出现过一次的两个数字。并且按照顺序输出。
a=[1,2,3,4,5,8,6,1,2,3,7,4,5,6]
8
7
a=[1,2,3,4,5,8,6,1,2,3,7,4,5,6]
'''任何数字与0异或都是其本身,
两个相同的数字异或为0。'''
def yihuo(a):
r=0
for i in a:
r^=i
#print(r)
return r
'''根据异或值的1位,通过与运算,来分开原数组。'''
def search():
r=yihuo(a)
p=0
while r!=0:
if r%2==1:
break
r//=2
p+=1
a1,a2=[],[]
for i in a:
if i>>p&1==1:
a1.append(i)
else:a2.append(i)
r1,r2=yihuo(a1),yihuo(a2)
return r1,r2
'''按顺序输出'''
def printout():
for i in a:
if i in search():
print(i)
printout()