题目的大概是,有一种通信方式,加入发送方发送个数为4,接收方回传2个;发送方发送一组数如[11,12,43,21],则接收方通过检测这组数里的二进制一的个数,返回最多的几个。[11,12,43,21]对应的二进制为[1101,0011,110101,10101],所以分别对应的1的个数为[3,2,4,3];所以应该返回43和11或21
下面是代码,由三个函数组成,分别是整数转二进制函数、计算二进制数1的个数和排序
list_number=[11,12,43,21]#应该在调换bit_number位置时list_number也一起调换
N=len(list_number)
element=2
bit_number=[]#每个数1的个数
def int2binary_func(x):#将x转化为二进制
bit=[]
while(x>0):
bit.append(x%2)
x=x//2
return bit
def cnt_bit_ones_func(bit):
#计算bit中有几个1
cnt=0
for i in bit:
if i==1:
cnt+=1
return cnt
def sort_func():
for i in range(N-1):
for j in range(i+1,N):
if bit_number[i]<bit_number[j]:#升序
bit_number[i],bit_number[j]=bit_number[j],bit_number[i]
list_number[i],list_number[j]=list_number[j],list_number[i]
for i in list_number:
print(int2binary_func(i))
bit_number.append(cnt_bit_ones_func(int2binary_func(i)))
print(bit_number)
sort_func()
print(list_number)
print(bit_number)
for i in range(element):
print(list_number[i])