华为编程题第一道Python
  很遗憾自己调试了半天都出不来,对牛客的意见很大,不能够进行调试,只要不和答案相关也不能输出,这样哪一步错了也不清楚(小伙伴们,不知道你们的是不是也是这样?) 
   关于第一道编程题,做题的时候,检查了好几遍,估计还是逻辑有些问题,不过线下自己调试了一下,出来结果了,可惜交卷了,悲痛中😥  
   题目大意是这样:输入一个十进制的整数,然后把它变成二进制后,找出含有‘101’这种二进制的组合有多少个,如果有10101这种,就算两个,很好理解。 
   本人的代码是这样的: 
 #输入
a=input()
b = int(a)
#转化成二进制
c =bin(b)
num = 0#这个是统计有几个101的个数的
str_m =[]#这个是存二进制每一个位的整数的,后来发现这步可以省,没改
str_c =list(str(c).replace('0b',''))#字符串分割成数组
location = 0#定位第一个101所在的位置
num_location = 0#输出定位所在的整型位置
n = len(str_c)-1#这是为了计算二进制字符数组的长度的
#计算有多少个101
for i in range(0,len(str_c)-2):
    if (str_c[i]=='1')&(str_c[i+1]=='0')&(str_c[i+2]=='1'):
        num = num+1
#计算101出现的第一个位置,这里比较绕,所在的位置为1所在的起点
for i in range(0,len(str_c)-2):
    if(str_c[n-i]=='1')&(str_c[n-i-1]=='0')&(str_c[n-i-2]=='1'):
        location = i
        break
#把数组数据头尾转换,然后存到一个新数组
for i in range(0,n+1):
    str_m.append(int(str_c[n-i]))
#将101所在的位置二进制转换成十进制,比如11011,101第一个出现的位置就是3
for i in range(0,location+1):
    if str_m[i]==1:
        num_location = 2**i +num_location
#如果存在101就输出,不存在就输出0,-1,(输出格式是m,n,m-101个数,n-起始位置)
if num==0:
    print(0,-1)
else:
    print(num,num_location,location,str_c) 进行了调试:
77 1 1希望接下来自己为自己的努力多攒点人气,加油加油!
 查看12道真题和解析
查看12道真题和解析

 投递上海得物信息集团有限公司等公司10个岗位
投递上海得物信息集团有限公司等公司10个岗位