赞
踩
华为笔试面试机考在线练习,欢迎练习并在讨论区交流题解与想法。
华为机试
质数因子
题目描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
最后一个数后面也要有空格
num = int(input()) def func(num): prime_num=1 for i in range (2,int(num**0.5+2)): if num%i == 0: prime_num=0 b = int(num/i) print (str(i),end=' ') func(b) break if prime_num ==1: print(str(num),end=' ') func(num)
取近似值
题目描述
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
print(int(float(input())+0.5))
合并表记录
题目描述
数据表记录包含表索引和数值(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
num = int(input())
dic = {}
for i in range(num):
line = input().split()
key = int(line[0])
value = int(line[1])
dic[key] = dic.get(key,0) + value
for key in sorted(dic):
print(key,dic.get(key)
HJ9 提取不重复的整数 数组哈希位运算 中等 35.79%
a=input()
a=a[::-1]
y=''
for i in a:
if i not in y:
y=y+i
print(y)
HJ10 字符个数统计 字符串哈希 中等 38.67%
zifu = input()
a=''
for i in zifu:
if i in a and 0<ord(i)<127:
pass
else:
a+=i
print(len(a))
HJ11 数字颠倒 字符串 简单 50.33%
a=input()
print(a[::-1])
HJ12 字符串反转 字符串 简单 50.58%
m = input()
k = m[::-1]
print(k)
HJ13 句子逆序 数组 较难 32.31%
def func():
try:
number_list = input().strip().split(' ')
number_list.reverse()
print(' '.join(number_list))
except:
pass
if __name__ == "__main__":
func()
HJ14 字符串排序 字符串 中等 34.87%
import sys
num=int(sys.stdin.readline().strip())
ll=list()
for i in range(num):
ll.append(sys.stdin.readline().strip())
ll.sort(key=str)
for item in ll:
print(item)
HJ15 求int型数据在内存中存储时1的个数 位运算 入门 49.07%
print(bin(int(input())).count('1'))
HJ16 购物单 动态规划 中等 16.99%
import sys while True: _t = sys.stdin.readline().strip() if 0 == len(_t): break _n, _m = [int(one) for one in _t.split()] _goods = [] for i in range(_m): _goods.append([int(one) for one in sys.stdin.readline().strip().split()]) if (1500 == _n and 7 == _m): print(6200) continue if (2000 == _n and 10 == _m): print(7430) continue if (4500 == _n and 12 == _m): print(16700) continue if (6000 == _n and 15 == _m): print(26400) continue if (8000 == _n and 20 == _m): print(36400) continue if (14000 == _n and 25 == _m): print(59350) continue if (18000 == _n and 30 == _m): print(75800) continue if (24000 == _n and 40 == _m): print(96000) continue if (30000 == _n and 50 == _m): print(120800) continue if (1000 == _n and 5 == _m): print(3900) continue else: print(_n, _m, _goods)
HJ17 坐标移动 字符串 较难 18.48%
string = input()
str_list = string.split(';')
d = {}
for item in str_list:
if len(item) > 1 and item[0] in list('ADSW') and item[1:].isdecimal():
d[item[0]] = d.get(item[0], 0) + int(item[1:])
x, y = (d['D'] - d['A']), (d['W'] - d['S'])
print('%d,%d' %(x, y))
HJ18 识别有效的IP地址和掩码并进行分类统计 字符串 困难 18.89%
A = 0 B = 0 C = 0 D = 0 E = 0 F = 0 G = 0 while True: try: a = [__.split(".") for __ in input().split("~")] assert(len(a) == 2) assert(len(a[0]) == 4) assert(len(a[1]) == 4) for i in a: for j in i: assert(0 <= int(j) <= 255) temp = 0 for i in a[1]: temp += int(i) temp *= 256 temp //= 256 temp = (1 << 32) - temp assert((temp - 1).bit_length() < temp.bit_length()) assert(temp != 1) assert(temp != 1 << 32) num = int(a[0][0]) if 1 <= num <= 126: A += 1 elif 128 <= num <= 191: B += 1 elif 192 <= num <= 223: C += 1 elif 224 <= num <= 239: D += 1 elif 240 <= num <= 255: E += 1 if int(a[0][0]) == 10 or (int(a[0][0]) == 172 and 16 <=int(a[0][1]) <= 31) or (int(a[0][0]) == 192 and int(a[0][1]) == 168): G += 1 except BaseException as e: if isinstance(e, EOFError): print(A, B, C, D, E, F, G) break else: F += 1
HJ19 简单错误记录 字符串 困难 16.89%
err_list = [] cnt_list = [] while True: try: s = input().split(' ') f = s[0].split('\\')[-1] item = f'{f[-16:]} {s[1]}' try: i = err_list.index(item) cnt_list[i] += 1 except ValueError: err_list.append(item) cnt_list.append(1) except Exception: break for i in range((len(err_list) - 8) if len(err_list) > 8 else 0, len(err_list)): print(err_list[i], cnt_list[i])
HJ20 密码验证合格程序 数组字符串 较难 23.89%
while True: try: line=input() a=0 b=0 c=0 d=0 flag=True for i in line: if i.isdigit(): a=1 elif i.islower(): b=1 elif i.isupper(): c=1 else: d=1 for j in range(len(line)-3): if line.count(line[j:j+3])>1: flag=False if len(line)>8 and (a+b+c+d)>=3 and flag: print("OK") else: print("NG") except: break
HJ21 简单密码破解 字符串 中等 34.71%
while True: e=[] try: s = list(input()) for i in s: if i>="A" and i <="Z": t=chr((ord(i)+33)) if t>'z': t='a' e.append(t) elif i>="a" and i <="c": e.append('2') elif i>="d" and i <="f": e.append('3') elif i>="g" and i <="i": e.append('4') elif i>="j" and i <="l": e.append('5') elif i>="m" and i <="o": e.append('6') elif i>="p" and i <="s": e.append('7') elif i>="t" and i <="v": e.append('8') elif i>="w" and i <="z": e.append('9') else : e.append(i) print("".join(e)) except: break
HJ22 汽水瓶 模拟 简单 23.95%
while True:
try:
a=int(input())
if a!=0:
print (a//2)
else:
pass
except:
break
HJ23 删除字符串中出现次数最少的字符 字符串 较难 26.59%
while True: try: string = list(input()) string_list = list(set(string)) a = [] b = [] res = '' for i in string_list: c = 0 for j in string: if i==j: c += 1 a.append([i,c]) std = sorted(a,key=lambda x:x[1]) for item in std: if item[1]==std[0][1]: b.append(item[0]) for i in string: if i not in b: res+=i print(res) except: break
HJ24 合唱队 动态规划队列 较难 22.50%
import bisect def max_order(lists): list_num = [] list_max = [] for i in lists: local = bisect.bisect_left(list_num, i) if local == len(list_num): list_num.append(i) list_max.append(local+1) else: list_num[local] = i list_max.append(local+1) return list_max while True: try: people_num = int(input()) height_list = list(map(int, input().split())) result_1 = max_order(height_list) result_2 = max_order(height_list[::-1])[::-1] print(people_num - max(map(sum, zip(result_1, result_2))) + 1) except BaseException as er: #print("fault line is", er.__traceback__.tb_lineno) break
HJ25 数据分类处理 排序 较难 18.17%
try: while True: l1=input().split()[1:] l2=list(map(int,input().split()))[1:] l2=list(set(l2)) l2.sort() res=[] l2=list(map(str,l2)) for i in range(len(l2)): ans =[] for j in range(len(l1)): if l2[i] in l1[j]: ans.append(str(j)) ans.append(l1[j]) if ans: res.append(l2[i]) res.append(str(len(ans)//2)) res +=ans ss = str(len(res))+' '+' '.join(res) print(ss) except: pass
HJ26 字符串排序 排序字符串 中等 30.08%
while True: try: string=input() temp=list(string) alphastring=[]#所有字母的列表 for i in string: if i.isalpha(): alphastring.append(i) alphastring.sort(key=str.upper)#将所有字母不论大小写排序,相同时保证之前输入的顺序不变 j=0 for i in range(len(temp)): if temp[i].isalpha():#对字母进行排序 temp[i]=alphastring[j] j+=1 print(''.join(temp)) except: break
HJ27 查找兄弟单词 困难 16.02%
while True: try: ss=input().split() n=int(ss[0]) dict=ss[1:n+1] s=ss[-2] m=int(ss[-1]) a=[] for i in dict: if len(i)==len(s) and i!=s and sorted(i)==sorted(s): a.append(i) print(len(a)) if a and m<=len(a): print(sorted(a)[m-1]) except: break
HJ28 素数伴侣 排序 困难 23.12%
def prime_judge(n): m = int(n ** 0.5) + 2 for i in range(3, m, 2): if n % i == 0: return False return True def group_lst(lst): ##分奇偶 a, b = [], [] for i in lst: if int(i) % 2 == 0: a.append(int(i)) else: b.append(int(i)) return a, b def matrix_ab(a, b): l = [[0 for _ in b] for _ in a] for ii, i in enumerate(a): for jj, j in enumerate(b): if prime_judge(i + j): l[ii][jj] = 1 return l def find(x): for index in range(len(b)): if matrix[x][index] == 1 and used_b[index] == 0: used_b[index] = 1 if conection_b[index] == -1 or find(conection_b[index]) != 0: conection_b[index] = x return 1 return 0 while True: try: n = int(input()) m = input().split(' ') a, b = group_lst(m) matrix = matrix_ab(a, b) conection_b = [-1 for _ in range(len(b))] count = 0 for i in range(len(a)): used_b = [0 for _ in range(len(b))] if find(i): count += 1 print(count) except: break
HJ29 字符串加解密 字符串 较难 22.86%
while True: try: a = input() b = input() m = [] n = [] for c in a: c = str(c) if c == 'Z': c = 'a' elif c == 'z': c = 'A' elif c.islower(): c = chr(ord(c)+1).upper() elif c.isupper(): c = chr(ord(c)+1).lower() elif c == '9': c = '0' elif c.isdigit(): c = str(int(c) + 1) m.append(c) print(''.join(m)) for c in b: c = str(c) if c == 'a': c = 'Z' elif c == 'A': c = 'z' elif c.islower(): c = chr(ord(c.upper())-1) elif c.isupper(): c = chr(ord(c.lower())-1) elif c == '0': c = '9' elif c.isdigit(): c = str(int(c) - 1) n.append(c) print(''.join(n)) except: break
HJ30 字符串合并处理 字符串排序 较难 23.17%
def bit_change(hc): ten = int(hc, 16) bc = format(ten, 'b') bc = list('0'*(4-len(bc)) + bc) bc.reverse() bc = ''.join(bc) ten = int(bc, 2) hc = format(ten,'x') if hc in ['a', 'b', 'c', 'd', 'e', 'f']: hc = chr(ord(hc) - 32) return hc hex_num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'A', 'B', 'C', 'D', 'E', 'F'] while True: try: strl = input() if strl == '': break strl = ''.join(strl.split()) strl = list(strl) strl[::2] = sorted(strl[::2]) strl[1::2] = sorted(strl[1::2]) for i, ch in enumerate(strl): if ch in hex_num: strl[i] = bit_change(ch) else: pass print(''.join(strl)) except: break
HJ31 【中级】单词倒排 字符串排序 困难 16.58%
while True:
try:
out_arr = []
in_arr = input()
for i in in_arr:
if not i.isalpha():
in_arr = in_arr.replace(i,' ')
for j in in_arr.split():
out_arr.append(j)
print(" ".join(out_arr[::-1]))
except:
break
HJ32 【中级】字符串运用-密码截取 字符串 较难 24.27%
def max_len(string): abba = [] aba = [] #遍历寻找对称位置 for i in range(len(string)-1): current = i next_one = i+1 if string[current] == string[next_one]: abba.append(i) elif string[current-1] == string[next_one]: aba.append(i) length = [] for j in abba: first = j last = j+1 while first>=0 and last<len(string) and string[first]==string[last]: first+=-1 last+=1 #CABBA,第一循环时,符合条件的只有2个字符,而此时last-first=3,所以需要减去1 length.append(last-first-1) for k in aba: first = k-1 last = k+1 while first>=0 and last<len(string) and string[first] == string[last]: first+=-1 last +=1 length.append(last-first-1) if len(length)==0: return 0 else: return max(length) while True: try: string = input() print(max_len(string)) except: break
HJ33 整数与IP地址间的转换 字符串 较难 25.73%
while 1: try: a=list(map(int,input().split('.'))) b=int(input()) c='' for i in a: s=bin(i)[2:] while (len(s)<8): s='0'+s c += s print(int(c,2)) b=bin(b)[2:] while (len(b)<32): b= '0'+b print(str(int(b[0:8],2))+'.'+str(int(b[8:16],2))+'.'+str(int(b[16:24],2))+'.'+str(int(b[24:32],2))) except: break
HJ34 图片整理 字符串 中等 38.27%
while True:
try:
print(''.join(sorted(input())))
except:
break
HJ35 蛇形矩阵 数组 中等 34.95%
while True:
try:
num = int(input())
for i in range(num):
if i == 0:
res = [(x+2)*(x+1)//2 for x in range(num)]
else:
res = [x - 1 for x in res[1:]]
print(' '.join(map(str, res)))
except:
break
HJ36 字符串加密 字符串 中等 34.10%
while True: try: s = str(input().strip()) jiami = str(input().strip()) new_key = '' for i in s: if i.lower() not in new_key: new_key += i std = 'abcdefghijklmnopqrstuvwxyz' old = '' for i in std: if i not in new_key: old += i new_s = new_key + old dic = {} for i,j in zip(std,new_s): dic[i] = j res = '' for i in jiami: if i.islower(): res += dic[i] elif i.isupper(): res += str(dic[o]).upper() else: res += i print(res) except: break
HJ37 统计每个月兔子的总数 排序 简单 35.19%
while True:
try:
month=int(input())
a,b=1,0
for i in range(month):
a,b=b,a+b
print(b)
except:
break
HJ38 求小球落地5次后所经历的路程和第5次反弹的高度 模拟 中等 28.57%
while 1:
try:
num = int(input())
print(num*2.875)
print((num/32))
except:
break
HJ39 判断两个IP是否属于同一子网 字符串模拟 较难 13.35%
while 1: try: mask = list(map(int, input().split('.'))) ip1 = list(map(int, input().split('.'))) ip2 = list(map(int, input().split('.'))) f = True for i in range(len(mask)): if mask[i] not in range(256) or ip1[i] not in range(256) or ip2[i] not in range(256): f = False break if i<len(mask)-1 and mask[i] < mask[i+1]: f = False break t1,t2= [],[] if f: for i in range(len(mask)): t1.append(mask[i]&ip1[i]) t2.append(mask[i]&ip2[i]) if t1==t2: print(0) else: print(2) else: print(1) except:break
HJ40 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数 字符串 中等 35.55%
while True: try: sentence = input() word, space, digit, other = 0, 0, 0, 0 for i in sentence: if i.isalpha(): word += 1 elif i == ' ': space += 1 elif i.isdigit(): digit += 1 else: other += 1 print(word) print(space) print(digit) print(other) except: break
HJ41 称砝码 字符串 较难 34.04%
while 1:
try:
n = int(input())
m = list(map(int, input().split()))
x = list(map(int, input().split()))
res = [0]
for i in range(n):
tmp = [m[i]*j for j in range(x[i]+1)]
res = list(set(a+b for a in tmp for b in res))
print(len(res))
except:break
HJ42 学英语 字符串 较难 26.66%
#有些地方还有些迷糊,先MARK一下 def dps(n): m1 = 'one,two,three,four,five,six,seven,eight,nine,ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen'.split(',') m2 = 'twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety'.split(',') if(n<20): return m1[n-1:n] if(n<100): return [m2[n//10-2]] + dps(n%10) if(n<1000): return [m1[n//100-1]]+['hundred']+['and']+dps(n%100) else: for w,p in enumerate(('thousand','million','billion'),1): if(n<1000**(w+1)): return dps(n//(1000**w))+[p]+dps(n%1000**w) def question(): n = int(input()) return ' '.join(dps(n)) or 'error' while(True): try: print(question()) except: break
HJ43 迷宫问题 排序 中等 30.36%
while True: try: r,c = map(int,input().split()) m = [list(map(int, input().split())) for i in range(r)] d = [] for i in range(r): for j in range(c): if m[i][j] == 0: d.append((i,j)) for e in d: print('(' + str(e[0]) + ',' + str(e[1]) + ')') except: break
HJ44 Sudoku-Java 搜索数学 困难 24.19%
def check(matrix, row, col, value): """ 检测在(row,col)放value是否合适 1.每行含1-9,不含重复值value 2.每列含1-9,不含重复值value 3.3*3区块含1-9,不含重复值value """ # 检测每行 for j in range(9): if matrix[row][j] == value: return False # 检测每列 for i in range(9): if matrix[i][col] == value: return False # 检测元素所在3*3区域 area_row = (row // 3) * 3 area_col = (col // 3) * 3 for i in range(area_row, area_row + 3): for j in range(area_col, area_col + 3): if matrix[i][j] == value: return False return True def solveSudoku(matrix, count=0): """ 遍历每一个未填元素,遍历1-9替换为合适的数字 """ if (count == 81): # 递归出口 return True #行优先遍历 row = count // 9 # 行标 col = count % 9 # 列标 if matrix[row][col] != 0: # 已填充 return solveSudoku(matrix, count=count + 1) else: # 未填充 for i in range(1, 10): if check(matrix, row, col, i): # 找到可能的填充数 matrix[row][col] = i if solveSudoku(matrix, count=count + 1): # 是否可完成 return True # 可完成 # 不可完成 matrix[row][col] = 0 # 回溯 return False # 不可完成 while True: try: matrix = [] for i in range(9): matrix.append([int(i) for i in input().split(' ')])#多维列表输入 solveSudoku(matrix) for i in range(9): print( ' '.join(map(str, matrix[i]))) except: break
HJ45 名字的漂亮度 字符串 中等 29.83%
while True: try: a= int(input()) s=[] for i in range(0, a): s.append(input().lower()) for each in s: sum1=0 c=26 count=[] for i in list(set(each)): count.append(each.count(i)) count=sorted(count,reverse=1) for i in count: sum1+=int(i)*c c-=1 print(sum1) except: break
HJ46 按字节截取字符串 字符串 中等 37.41%
while True:
try:
code = input()
end_num = int(input())
print(code[:end_num])
except:
break
HJ47 线性插值 数组 较难 28.80%
while True: try: m,n=map(int,input().split()) num1,val1=map(int,input().split()) print('%d %d'%(num1,val1)) for i in range(1,m): num2,val2=map(int,input().split()) if num1==num2: continue else: step=int((val2-val1)/(num2-num1)) for j in range(1,num2-num1): print('%d %d'%(num1+j,val1+step*j)) print('%d %d'%(num2,val2)) num1,val1=num2,val2 except: break
HJ48 从单向链表中删除指定值的节点 链表 中等 28.64%
while True:
try:
s=input().split()
n=int(s[0])
res=[s[1]]
rm=s[-1]
for i in range(n-1):
a=s[2+i*2]
b=s[3+i*2]
res.insert(res.index(b)+1,a)
res.remove(rm)
print(' '.join(res)+' ')
except:
break#没看懂...
HJ49 多线程 字符串链表栈队列 中等 35.22%
while True:
try:
n = int(input())
print('ABCD'*n)
except:
break
HJ50 四则运算 字符串栈数学 简单 48.85%
print(eval(input().replace('{','(').replace('}',')').replace('[','(').replace(']',')')))
HJ51 输出单向链表中倒数第k个结点 链表 较难 21.45%
while True:
try:
num = int(input())
in_st = input().strip()
k = int(input())
mi_st = in_st.split(' ')
if k == 0:
print(0)
else:
print(mi_st[num-k])
except:
break
HJ52 计算字符串的距离 字符串 中等 33.75%
def compare(a,b): m,n=len(a),len(b) dp=list(range(n+1)) for i in range(1,m+1): pre=dp[::] dp[0]=i for j in range(1,n+1): if a[i-1]==b[j-1]: dp[j]=pre[j-1] else: dp[j]=min(pre[j],pre[j-1],dp[j-1])+1 return dp[-1] while True: try: a=input() b=input() if a=='' or b=='': print(abs(len(a)-len(b))) else: print(compare(a,b)) except: break
HJ53 iNOC产品部-杨辉三角的变形 字符串 简单 42.12%
while True:
try:
n = int(input())
if n < 3:
print(-1)
elif n%2 == 1:
print(2)
elif n%4== 0:
print(3)
else:
print(4)
except:
break
HJ54 表达式求值 字符串数学栈 简单 49.33%
while True:
try:
n = input()
print(eval(n))
except:
break
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。