又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证idear,避免重复造轮子的繁琐,希望对看合集的你有些许帮助!

  1. 「解析」牛客网-华为机考企业真题 1-20
  2. 「解析」牛客网-华为机考企业真题 21-40
  3. 「解析」牛客网-华为机考企业真题 41-60
  4. 「解析」牛客网-华为机考企业真题 61-80
  5. 「解析」牛客网-华为机考企业真题 81-108

文章目录

  • HJ80 整型数组合并
  • HJ81 字符串字符匹配
  • ★★ HJ82 将真分数分解为埃及分数
  • HJ83 二维数组操作
  • HJ84 统计大写字母个数
  • ★★ HJ85 最长回文子串
  • HJ86 求最大连续bit数
  • HJ87 密码强度等级
  • HJ88 扑克牌大小
  • HJ89 24点运算
  • HJ90 合法IP
  • HJ91 走方格的方案数
  • HJ92 在字符串中找出连续最长的数字串
  • ★★★ HJ93 数组分组
  • HJ94 记票统计
  • ★★★ HJ95 人民币转换
  • HJ96 表示数字
  • HJ97 记负均正
  • ★★★★★ HJ98 自动售货系统
  • HJ99 自守数
  • HJ100 等差数列
  • HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序
  • HJ102 字符统计
  • ★★★ HJ103 Redraiment的走法
  • HJ105 记负均正II
  • HJ106 字符逆序
  • HJ107 求解立方根
  • HJ108 求最小公倍数

HJ80 整型数组合并

s0,s1,s3,s2 = input(), input().split(), input(), input().split()
s = map(str,sorted(map(int, set(s1+s2))))
print(''.join(s))

HJ81 字符串字符匹配

st1 = set(input())
st2 = set(input())
flag = 0
for i in st1:if i not in st2:flag +=1print('true') if flag ==0 else print('false')

★★ HJ82 将真分数分解为埃及分数


解题思路:将真分数(a/b)拆分成a*(1/b),也就是a个1/b,然后我们从大到小依次找出a中能被B整除的数.

比如: 5/8 这个真分数首先我们看,5不能被8整除,但是4可以,那从5中把4分离出来,变成1+4,剩余的1不能拆分,那埃及分数就是1/8+1/2

while True:try:a,b = map(int,input().split('/'))a = a * 10b = b * 10res = []while a:for i in range(a,0,-1):if(b % i == 0):res.append('1' + '/' + str(int(b / i)))a = a - ibreakprint('+'.join(res))except:break

HJ83 二维数组操作

while True:try:m, n = map(int, input().split())x1, y1, x2, y2 = map(int, input().split())x, y = int(input()), int(input())x3, y3 = map(int, input().split())print(0 if m <= 9 and n <= 9 else -1)print(0 if x1 < m and x2 < m and y1 < n and y2 < n else -1)print(0 if 9 > m > x else -1)print(0 if 9 > n > y else -1)print(0 if x3 < m and y3 < n else -1)except:break

HJ84 统计大写字母个数

lst = input()
n = 0
for i in lst:if ord("A") <= ord(i) <= ord("Z"):n += 1
print(n)

★★ HJ85 最长回文子串

while True:try:s = input()res = []for i in range(len(s)):for j in range(i+1, len(s)+1):if s[i:j] == s[i:j][::-1]:res.append(j-i)if res != '':print(max(res))except:break

HJ86 求最大连续bit数

n = int(input())
n = bin(n)[2:]      # 去除掉 0bn = n.split('0')
ls = []
for i in n:ls.append(i.count('1'))
print(max(ls))

HJ87 密码强度等级



while True:try:s = input()sc = 0# 密码长度if len(s) <= 4:sc = sc + 5elif len(s) <= 7:sc = sc + 10else:sc = sc + 25# 字母isu = 0isl = 0for i in s:if i.isupper():isu = 1breakfor i in s:if i.islower():isl = 1breaksc = sc + 10 * (isu + isl)# 数字shu = '0123456789'count1 = 0for i in s:if i in shu:count1 = count1 + 1if count1 == 1:sc = sc + 10elif count1 > 1:sc = sc + 20else:sc = sc# 符号fh = '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'count2 = 0for i in s:if i in fh:count2 = count2 + 1if count2 == 1:sc = sc + 10elif count2 > 1:sc = sc + 25else:sc = sc# 奖励if isu + isl == 2 and count1 >= 1 and count2 >= 1:sc = sc + 5elif isu + isl > 1 and count1 >= 1 and count2 >= 1:sc = sc + 3elif isu + isl > 1 and count1 >= 1:sc = sc + 2if sc >= 90:print("VERY_SECURE")elif sc >= 80:print("SECURE")elif sc >= 70:print("VERY_STRONG")elif sc >= 60:print("STRONG")elif sc >= 50:print("AVERAGE")elif sc >= 25:print("WEAK")elif sc >= 0:print("VERY_WEAK")except:break

HJ88 扑克牌大小

dic = {'3' : 1, '4' : 2, '5' : 3, '6' : 4, '7' : 5, '8': 6,'9' : 7, '10' : 8, 'J' : 9, 'Q' : 10, 'K' : 11, 'A' : 12,'2' : 13, 'joker' : 14, 'JOKER' : 15
}def isboom(lst):if len(lst) == 4 and len(set(lst)) == 1:return Truereturn Falsewhile True:try:s1, s2 = input().split('-')lst1, lst2 = s1.split(), s2.split()L1, L2 = len(lst1), len(lst2)if L1 == L2:if dic[lst1[0]] > dic[lst2[0]]:print(s1)else:print(s2)else:if 'joker JOKER' in (s1, s2):print('joker JOKER')elif isboom(lst1):print(s1)elif isboom(lst2):print(s2)else:print('ERROR')except:break

HJ89 24点运算


a = input().split(' ')
dictory = {'J':11,'Q':12,'K':13,'A':1}
def dfs(wait,target,out):if len(wait) == 1:if wait[0] in dictory:c = dictory[wait[0]]else:c = int(wait[0])if target == c:L.append(wait[0]+out)else:for i in range(len(wait)):w = wait[:i]+wait[i+1::]if wait[i] in dictory:c = dictory[wait[i]]else:c = int(wait[i])dfs(w,target-c,'+'+wait[i]+out)dfs(w,target+c,'-'+wait[i]+out)dfs(w,target*c,'/'+wait[i]+out)dfs(w,target/c,'*'+wait[i]+out)L = []
if 'joker' in a or 'JOKER' in a:print('ERROR')
else:dfs(a,24,'')if not L:print('NONE')else:print(L[0])

HJ90 合法IP

ip = input().split(".")
if len(ip) != 4:    # 排除长度不为4部分的print("NO")
else:for i in ip:if (not i.isdigit()    # 排除不是数字的or (len(i) > 1 and i[0] == "0")    # 排除首位为0的or int(i) < 0    # 排除在[0,255]范围外的or int(i) > 255):print("NO")breakelse:print("YES")

HJ91 走方格的方案数


迭代方法:

def func(x,y):if x < 0 or y < 0:return 0elif x == 0 or y == 0:return 1else:return func(x-1, y)+func(x, y-1)while True:try:a,b = map(int,input().split())c = func(a, b)print(c)except:break

动态规划解决

while True:try:n,m = map(int, input().split(' '))dp = [[1 for i in range(n+1)] for j in range(m+1)]for i in range(1,m+1):for j in range(1,n+1):dp[i][j] = dp[i-1][j]+dp[i][j-1]print(dp[m][n])except:break

HJ92 在字符串中找出连续最长的数字串

采用遍历方法:

while True:try:s = input()for c in s:if not c.isdigit():s = s.replace(c, " ")s = s.split()max_flag = 0res = ""for c in s:if len(c)>max_flag:max_flag = len(c)for c in s:if len(c)==max_flag:res = res+cprint(str(res)+','+str(max_flag))except:break

★★★ HJ93 数组分组

1.首先计算3,5倍数的差值,如果3的倍数为+,那么5的倍数为-,反之亦然。把结果放入set{}集合中
2.分别取剩余数值,与之前结果计算,每个数值都可以为+或者-,那么把+,-的结果均放入集合中
3.全部计算完成后,如果0值在结果里,则返回true,否则返回falsewhile True:try:length = int(input())num_list = list(map(int, input().strip().split()))res = 0# 计算初始3,5倍数的差值for _ in range(length):i = num_list.pop(0)if i % 3 == 0:res += ielif i % 5 == 0:res -= ielse:num_list.append(i)res = {res}# 结果计算,把之前结果,分别计算当前值的+和- 2种情况,然后把结果再放回去,给下一次计算while num_list:i = num_list.pop(0)res_plus = [x + i for x in res]res_plus.extend([x - i * 2 for x in res_plus])res = set(res_plus)# 最后如果0值在结果中,表示可以算出,如果不在则不行if 0 in res:print('true')else:print('false')except:break

HJ94 记票统计

n1, lst1, n2, lst2 = int(input()), input().split(' '), int(input()), input().split(' ')n = 0
lst=[]
for i in lst2:if i not in lst1:n += 1
for j in range(len(lst1)):print(lst1[j],':', lst2.count(lst1[j]))print('Invalid :',n)

★★★ HJ95 人民币转换

import rermb_list = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖','拾','佰','仟','万','亿']
rmb_list2 = ['','拾','佰','仟','万','拾','佰','仟','亿']s = input().split('.')
s1 = s[0][::-1]
s2 = s[1]
res = ''# 计算小数点前面
if int(s1)>0:for i in range(len(s1)):if s1[i] == '0':res = rmb_list[int(s1[i])] + reselse:res = rmb_list[int(s1[i])] + rmb_list2[i] + resres = res.replace('壹拾','拾')tmp = re.findall(r'[\'零\']{2,20}',res)if tmp:for t in tmp:res = res.replace(t,'零')if res[-1] == '零':res = res[:-1]res += '元'# 计算小数点后面
if int(s2) == 0:res += '整'
elif int(s2) >= 10:if int(s2[1]) != 0:res += rmb_list[int(s2[0])] +'角' +  rmb_list[int(s2[1])] + '分'else:res += rmb_list[int(s2[0])] +'角'
else:res += rmb_list[int(s2[1])] +'分'
res = '人民币' + resprint(res)

HJ96 表示数字

s = input()
s_o = ''
char_pre = ''
for i in s:if i.isdigit() : #遇到数字,判断其前面是否非数字,是则表示数字的开始,先插入‘*’if char_pre.isdigit() != True:s_o +='*'else: #非数字情况,判断其前是否为数字,是则表示数字结束,插入‘*’if char_pre.isdigit():s_o +='*'s_o += i #把当前字符带出来char_pre = i #当前字符更新到 前字符if s[-1].isdigit(): #结束的时候,判断是否数字结束,如果是的话,插入‘*’s_o +='*'print(s_o)

HJ97 记负均正

a = int(input())
lst = input().split()a = 0   # 小于0 的数量
b = 0   # 大于0 的数量、
sum = 0.0for i in lst:i = int(i)if i<0:a +=1elif i > 0:b += 1sum += iprint(a, '%.1f'%(sum/b)) if b > 0 else print(a, 0.0)

★★★★★ HJ98 自动售货系统





def f(pq):w10, w5, w2, w1 = 0, 0, 0, 0  # 记录已经找出的零钱while pq > 0:  # 循环直到找零完成if pq >= 10 and dic_q['10'] >= 1:  # 可以找10元时pq -= 10  # 余额减10w10 += 1  # 已经找出的零钱+1dic_q['10'] -= 1  # 零钱10数量-1elif pq >= 5 and dic_q['5'] >= 1:  # 可以找5元时pq -= 5w5 += 1dic_q['5'] -= 1elif pq >= 2 and dic_q['2'] >= 1:pq -= 2w2 += 1dic_q['2'] -= 1elif pq >= 1 and dic_q['1'] >= 1:pq -= 1w1 += 1dic_q['1'] -= 1else:pq -= 1  # 耍赖,如果因零钱不足导致不能退币,则尽最大可能退币,以减少用户损失。return pq, w1, w2, w5, w10
while True:try:s = input().split(';')dic_m = {'A1': 2, 'A2': 3, 'A3': 4, 'A4': 5, 'A5': 8, 'A6': 6}  # 商品单价字典dic_n = {'A1': 0, 'A2': 0, 'A3': 0, 'A4': 0, 'A5': 0, 'A6': 0}  # 商品数量字典dic_q = {'10': 0, '5': 0, '2': 0, '1': 0}  # 零钱字典pq = 0for i in s[:-1]:if i[0] == 'r':  # 系统初始化,把商品数量和零钱放入字典b = i.split()m = b[1].split('-')q = b[2].split('-')dic_n['A1'], dic_n['A2'], dic_n['A3'], dic_n['A4'], dic_n['A5'], dic_n['A6'] = int(m[0]), int(m[1]), int(m[2]), int(m[3]), int(m[4]), int(m[5])dic_q['1'], dic_q['2'], dic_q['5'], dic_q['10'] = int(q[0]), int(q[1]), int(q[2]), int(q[3])print('S001:Initialization is successful')elif i[0] == 'p':  # 投币pq1 = int(i.split()[1])if pq1 not in [1, 2, 5, 10]:  # 币值非法print('E002:Denomination error')elif pq1 not in [1, 2] and pq1 >= (dic_q['1'] + dic_q['2']*2):  # 存钱盒中1元和2元面额钱币总额小于本次投入的钱币面额print('E003:Change is not enough, pay fail')elif dic_n['A1'] == 0 and dic_n['A2'] == 0 and dic_n['A3'] == 0 and dic_n['A4'] == 0 and dic_n['A5'] == 0 and dic_n['A6'] == 0:  # 自动售货机中商品全部销售完毕print('E005:All the goods sold out')else :dic_q[str(pq1)] += 1  # 字典对应币值零钱数量加一pq += pq1  # 投币余额增加print('S002:Pay success,balance={}'.format(pq))elif i[0] == 'b':  # 购买商品bn = i.split()[1]if bn not in dic_n.keys():  # 购买的商品不在商品列表中print('E006:Goods does not exist')elif dic_n[bn] == 0:  # 所购买的商品的数量为0print('E007:The goods sold out')elif int(pq) < dic_m[bn]:  # 投币余额小于待购买商品价格print('E008:Lack of balance')else:pq = int(pq) - dic_m[bn]  # 余额相应减少print('S003:Buy success,balance={}'.format(pq))dic_n[bn] -= 1  # 贩卖机物品数量减一elif i[0] == 'c':if pq == 0:  # 币余额等于0print('E009:Work failure')else:  # 按照退币原则进行“找零”pq, w1, w2, w5, w10= f(pq)  # f()函数实现过程print('1 yuan coin number={}'.format(w1))print('2 yuan coin number={}'.format(w2))print('5 yuan coin number={}'.format(w5))print('10 yuan coin number={}'.format(w10))elif i[0] == 'q':  # 查询功能if ' ' not in i:  # 给出的案例中q1之间无空格,非标准输入。为了过示例添加print('E010:Parameter error')elif i.split()[1] not in ['0', '1']:  # “查询类别”参数错误print('E010:Parameter error')elif i.split()[1] == '0':  # 查询类别0print('A1 2 {}'.format(dic_n['A1']))print('A2 3 {}'.format(dic_n['A2']))print('A3 4 {}'.format(dic_n['A3']))print('A4 5 {}'.format(dic_n['A4']))print('A5 8 {}'.format(dic_n['A5']))print('A6 6 {}'.format(dic_n['A6']))elif i.split()[1] == '1':  # 查询类别1print('1 yuan coin number={}'.format(dic_q['1']))print('2 yuan coin number={}'.format(dic_q['2']))print('5 yuan coin number={}'.format(dic_q['5']))print('10 yuan coin number={}'.format(dic_q['10']))except:break

HJ99 自守数

a = int(input())
n = 0
for s in range(a +1):ss = s**2b = str(s)bb = str(ss)if b == bb[-len(b):]:n +=1print(n)

HJ100 等差数列

a = int(input())b = 2*a + 1.5 * a * (a-1)print(int(b))

HJ101 输入整型数组和排序标识,对其元素按照升序或降序进行排序

a = int(input())lst = [int(i) for i in input().split()]
# lst = list(map(int, input().split()))    # 需要转成整数,才能排序b = input()if  b == "0":lst = sorted(lst, reverse=False)
elif b == "1":lst = sorted(lst, reverse=True)for j in lst:print(j, end=' ')

HJ102 字符统计

while True:try:a = input()s = sorted(set(a))           # reverse=True 降序操作ss = sorted(s, key=lambda x:a.count(x),reverse=True) print(''.join(ss))except:break

★★★ HJ103 Redraiment的走法


这道题也可以看作“动态规划问题”:求升序排列的子数组最大长度

创建一个全为1的n列数组,本题为 [1,1,1,1,1] 创建双层循环,外层遍历n位数字倒序,内层遍历第n位后的子数组,判断子数组中的数字是否大于当前数字,如果有大于当前数字的数字,则说明还有递增的可能性,因此求 L[j] 的最大值+1;如果没有比当前数字大的数,说明从当前位出发,没有再递增的可能性,所以L[i]=1,保持不变。 将上述逻辑整理为代码如下:

while True: try: n = int(input()) s = [int(x) for x in input().split()] L = [1]* nfor i in reversed(range(n)):for j in range(i+1, n):if s[j] > s[i]:L[i] = max(L[i], L[j] + 1)max_len = max(L)print(max_len)except:break

HJ105 记负均正II

lst = []
num = [0, 0]
p = 0while True:try:lst.append(input())except:breakfor i in lst:i = int(i)if i < 0:p += 1elif i == 0 :continueelse:num[0] += 1     # 数量num[1] += i     # sumif num[0] != 0:print(p)print(f'%.1f'%(num[1] / num[0] ))else:print(p)print(0.0)

HJ106 字符逆序

string = input()print(string[::-1])

HJ107 求解立方根

# 法一:牛顿迭代法
while True:try:a = float(input().strip())  # 获取输入的实数ae = 0.0001  # 设定一个精度值t = a  # 初始化立方根t的值为输入的值awhile abs(t*t*t - a) > e:  # 差值没有达到精度,便一直更新立方根# x(i+1) = x(i) - f(xi)/f'(xi)# 更新后的x = 原x - (原x的立方-a)/f(原x)导数t = t - (t*t*t - a) * 1.0 / (3 * t*t)print("%.1f" % t)  # 当精度达到要求时,此时的立方根t便为输入实数的立方根解except:break# 法二:二分法
while True:try:a = float(input().strip())epsilon = 0.0001low = min(-1.0, a)high = max(1.0, a)ans = (low + high)/2while abs(ans**3 - a) >= epsilon:if ans**3 < a:low = anselse:high = ansans = (low + high)/2.0print('%.1f' % ans)except:break

HJ108 求最小公倍数


在大的数的倍数里面去找最小的能整除另外一个数的数,就是最小公倍数,按照大的来找,循环次数能够降到很少

lst = input().split()a ,b= int(lst[0]),int(lst[1])if a<b:a,b = b, afor i in range(a, a*b+1, a):if i % b ==0:print(i)break

「解析」牛客网-华为机考企业真题 81-108相关推荐

  1. 「解析」牛客网-华为机考企业真题 1-20

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  2. 「解析」牛客网-华为机考企业真题 41-60

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  3. 「解析」牛客网-华为机考企业真题 21-40

    又是一年春招时,有幸收到华为自动驾驶算法岗,之前刷题不多,在此汇总下牛客网的真题,主要采用Python编写,个人觉得语言只是实现工具而已,并不是很关键,Python简洁易懂,更加适合算法工程师快速验证 ...

  4. JavsScript牛客网华为机试(11-20)题解

    牛客网华为机试题解JavaScript版本 华为机试第11-20题解答(js) 11.数字颠倒 12.字符串反转 13.句子逆序 14.字符串排序 15.求int型数据在内存中存储时1的个数 16.购 ...

  5. 牛客网--华为机试在线训练10:字符个数统计

    牛客网–华为机试在线训练10:字符个数统计 题目描述 编写一个函数,计算字符串中含有的不同字符的个数.字符在ACSII码范围内(0~127).不在范围内的不作统计. 输入描述: 输入N个字符,字符在A ...

  6. 牛客网–华为机试在线训练9:提取不重复的数

    牛客网–华为机试在线训练9:提取不重复的数 题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺 ...

  7. 牛客网–华为机试在线训练8:合并表记录

    牛客网–华为机试在线训练8:合并表记录 题目描述 数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出. 输入描述: 先输入键值对的个 ...

  8. 牛客网–华为机试在线训练7:取近似值

    牛客网–华为机试在线训练7:取近似值 题目描述 写出一个程序,接受一个正浮点数值,输出该数值的近似整数值.如果小数点后数值大于等于5,向上取整:小于5,则向下取整. 输入描述: 输入一个正浮点数值 输 ...

  9. 牛客网–华为机试在线训练6:质数因子

    牛客网–华为机试在线训练6:质数因子 题目描述 功能:输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 ) 最后一个数后面也要有空格 详细描述: 函数接 ...

最新文章

  1. Java堆和栈的基本理解
  2. Unity3D 镜面反射
  3. Django 各类配置选项全集
  4. Android开发者指南(18) —— Web Apps Overview
  5. zabbix snmp trap 监控
  6. Zuul网关原理及源码解读(草稿版)
  7. 浅谈HashMap的实现原理
  8. python 16进制补零_Python输出16进制不带0x补零,整数转16进制,字符串转16进制
  9. php+反序列化代码执行漏洞,PHP反序列化漏洞
  10. 如何用python创建文件_怎么用python建立一个txt文档,并输入内容-百度经验
  11. rem单位中html默认字号,轻松掌握CSS3中的字体大小单位rem的使用方法
  12. 第 14 章 享元模式
  13. ssm校园帮代服务系统的设计与实现答辩PPT模板
  14. eclipse中如何修改编码格式
  15. 不借助 vue-cli 工具自行搭建 vue 项目
  16. 班迪录屏- Bandicam v4.5.6
  17. 【C代码】结构体数组初始化的相关总结
  18. 删除windows默认共享
  19. Python爬虫进阶教程(五):数据存储
  20. TP5之微信小程序推送模板消息

热门文章

  1. 17 个关于雪花的有趣事实❄️❄️❄️
  2. “公式相声”来了,人工智能说相声还会远吗?
  3. 彻底删除C盘下快压安装程序(dsetup.exe)
  4. ECJIA到家短信插件开发
  5. 【附源码】计算机毕业设计SSM小学英语学习系统
  6. MySQL之基础管理
  7. PyInstaller天坑终极攻略(PyInstaller莫名报错?面对错误信息无从下手?全网找不到解决方法?面对PyInstaller中的那些莫名天坑不如和我一起手动打包python解释器和项目)
  8. uniapp防抖节流的使用
  9. 什么是微服务以及微服务的技术点
  10. 如何查询移动物联网卡ICCID号码?