首页 > 华为机考826第一题思路
头像
小白N号
编辑于 2020-08-27 16:03
+ 关注

华为机考826第一题思路

华为机试第一题:
输入n个无符号整数,两个整数直接用空格隔开,n不超过1000.
加扰步骤:
1.每个整数每两个bit交换位置,如 bit0 bit1,bit2 bit3...
2.再把每个数向右移动两位,溢出的部分依次像下一个整数的最高位移动,末尾的右移两位到第一个数的最高两位

输入:egg:1 2
输出:1073741824 2147483648

第一题我的总体思路是通过字符串来模拟加扰操作,总体的思路是将所有的整数转换为包含0,1 的列表,然后在列表内部每两位bit进行交换,以及高低位进行拼接,最后在用列表来重构整数。
#华为第一题
def mok_2(n,k=2):
    '''把整数转换成二进制的字符列表'''
    bits = []
    while n:
        bits.append(n%k)
        n = n//k
    if len(bits)<32:
        bits.extend([0]*(32-len(bits)))
    bits.reverse()
    return bits
def rebuild(res):
    '''把列表重构为整数'''
    nums = []
    for i in range(len(res)//32):
        this_num = ''.join(str(x) for x in res[i*32:(i+1)*32])
        nums.append(int(this_num,2))
    return nums

#调用函数
nums = list(map(int,input().split()))
res = []
for num in nums:   #所有整数的转换字符列表加入到res中
    res.extend(mok_2(num))
for i in range(0, len(res),2):          #加扰1
    res[i], res[i+1] = res[i+1], res[i]
res = res[-2:]+res[:-2]                 #加扰2
num = rebuild(res)
print(' '.join([str(x) for x in num]))


全部评论

(2) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐