2017中兴笔试python实现(一种通信规则)

题目的大概是,有一种通信方式,加入发送方发送个数为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])




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值