华为机试python3题解(17题 持续更新ing)

字符串

HJ1 计算字符串最后一个单词的长度

输入:hello nowcoder
输出:8
最后一个单词为nowcoder,长度为8

a = input().split(' ')
print(len(a[-1]))

HJ2 输出输入字符串中含有该字符的个数。(不区分大小写字母)

输入:ABCabc
A
输出:2

a=input().lower() #第一行的input
b=input().lower() #第二行的input
print(a.count(b))
#str.count(sub, start= 0,end=len(string)) 可以统计子字符串出现次数

HJ4 字符串分隔

按长度为8拆分每个输入字符串并进行输出;
长度不是8整数倍的字符串请在后面补数字0

输入:abc
输出:abc00000

l = input()
for i in range(0, len(l), 8):
    print("{0:0<8s}".format(l[i:i+8]))
{冒号+填充符+对齐方式+宽度}

HJ9 提取不重复的整数

输入:9876673 输出:37689

n = input()
l = []
for i in n[::-1]:
    if i in l:
        continue
    else:
        l.append(i)
        print(i,end='')

倒序类

HJ11 数字颠倒

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

HJ12 字符串反转

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

HJ13 句子倒序

line = input().split(' ')
for i in line[::-1]:
    print(i,end= ' ')

HJ14 字符串排序

n = int(input())
b = []
for i in range(n):
    b.append(input())
b = sorted(b)
for i in b:
    print(i)

HJ31 单词倒排

import re
a = input()
res = re.split(r'[^A-Za-z]',a)
res.reverse()
#res是列表['student', 'a', 'am', 'I']
print(" ".join(res))

数学

HJ7 取近似值

f = float(input())
i = int(f)
if f-i >=0.5:
    print(i+1)
else:
    print(i)
error:int('5.5')不行

HJ5 进制转换

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

输入:0xAA
输出:170

s = input()
print(int(s,16))
int(x进制型,x)可以完成x进制到十进制的转换

HJ15 求int型正整数在内存中存储时1的个数

num = int(input())
bi = bin(num) #十进制转二进制

print(str(bi).count('1'))

HJ6 质数因子

输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )

输入:180
输出:2 2 3 3 5

import math
n = int(input())
for i in range(2, int(math.sqrt(n))+1): #sqrt取平方根
    while n % i == 0:
        print(i, end=' ')
        n = n // i  #int的效果 //是除了并取整
if n > 2:
    print(n)

HJ108 最小公倍数

求输入A和B的最小公倍数

A,B = input().split()
A = int(A)
B = int(B)
# map(function函数, iterable可遍历序列)
A, B = map(int, input().split())

T = 1
for i in range(2, min(A,B)+1):
    while A%i == 0 and B%i == 0:
        T = T*i 
        A = A/i 
        B = B/i 
print(T*A*B)

基本数据结构

字典:HJ8 合并表记录

数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并

输入:
4
0 1
0 2
1 2
3 4
输出:
0 3
1 2
3 4

注意字符串要用int
dic.get(查找的key,无此key返回默认值)
n = int(input())
dic = {}
for i in range(n):
    line = input().split()
    k = int(line[0])
    v = int(line[1])
    dic[k] = dic.get(k,0) + v

for j in sorted(dic):
    print(j,dic[j])

字典:HJ10字符串统计

输入:abc -----输出:3

from collections import Counter
a = input()
print(len(Counter(a)))

字典:HJ23 删除字符串中出现次数最少的字符

a = input()
dic = {}
for i in a:
    if i not in dic.keys():
        dic[i] = 1
    else:
        dic[i] += 1
minv = min(dic.values())
res = []
for i in a:
    if dic[i] != minv:
        print(i,end='')

模拟

HJ22 汽水瓶

while True:
    n = int(input())
    if n == 0:
        break
    else:
        print(n//2)

HJ21 哈希:简单密码

小写字母输入模拟手机九宫格,大写字母为后一位的小写,数字不变

输入 YUANzhi1987
输出 zvbo9441987

A = '1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
B = '122233344455566677778889999bcdefghijklmnopqrstuvwxyza'
a = []
b = []
for i in A:
    a.append(i)
for i in B:
    b.append(i)
inpu = input()
password = []
for i in inpu:
    if i in a:
        password.append(b[a.index(i)])
    else: #number
        password.append(i)
for i in password:
    print(i,end='')

HJ35 蛇形矩阵

n = int(input()) #以n为4为例
number = 0
#输出矩阵中最大的数 number = 10
for i in range(n+1):
    number += i
#L里有四行 为4个list
L = []
for i in range(n):
    L.append([]) 

while number >0:
    for i in range(n):
        L[i].append(str(number - i))
    number -= n
    n -=1 #以4,3,2,1循环前面for
#输出为[10, 6, 3, 1], [9, 5, 2], [8, 4], [7]]
#每个list倒序输出
for item in L:
    print(" ".join(item[::-1]))
#join某需要连接的序列 需要为str

HJ37 斐波那契:统计每个月兔子的总数

n=int(input())
def func(n):
    if n<=2:
        return 1
    else:
        return func(n-1)+func(n-2)
print(func(n))

美团笔试1 哈希 数圈游戏

输入:886
输出:5

#列表哈希
num = input()
num = num.lstrip('-')
l1 = ['0','6','8','9']
l2 = [1,1,2,1]

zero = 0
for i in num:
    if i in l1:
        zero += l2[l1.index(i)]
print(zero)
#字典哈希
num = input()
num = num.lstrip('-')
l1 = ['0','6','8','9']
l2 = [1,1,2,1]

dic=dict()
for i in range(len(l1)):
  dic[l1[i]]=l2[i]
zero = 0
for i in num:
    zero+=dic.get(i,0)
print(zero)

美团笔试3 是否有直接联通道路

输入:4 5
1 2 1 3 1
2 1 3 2 4
4
1 2
2 4
2 3
1 4
输出:Yes #第一条路为1到2
No
Yes #第四条路为3到2
Yes #第5条路为1到4

n,m = input().split()
l1 = []
l2 = []
for i in input().split():
  l1.append(int(i))
for i in input().split():
  l2.append(int(i))
q = input()
li = []
for i in range(5):
  li.append([l1[i],l2[i]])

for i in range(int(q)):
  a,b = map(int,input().split())
  if [a,b] in li or [b,a] in li:
    print('Yes')
  else:
    print('No')

webank舞会

今天,在冬木市举行了一场盛大的舞会。参加舞会的有n位男士,从1到n编号;有m位女士,从1到m编号。对于每一位男士,他们心中都有各自心仪的一些女士,在这次舞会中,他们希望能与每一位自己心仪的女士跳一次舞。同样的,对于每一位女士,她们心中也有各自心仪的一些男士,她们也希望能与每一位自己心仪的男士跳一次舞。在舞会中,对于每一首舞曲,你可以选择一些男士和女士出来跳舞。但是显然的,一首舞曲中一位男士只能与一位女士跳舞,一位女士也只能与一位男士跳舞,由于舞会的时间有限,现在你想知道最少需要准备多少首舞曲,才能使所有的人的心愿都得到满足?

输入
第一行包含两个整数n,m,表示男士和女士的数量。1 <= n,m <= 100
接下来n行,对于第 i+1 行,描述的是编号为i的男士心仪的女士。
在第 i+1 行中,首先包含一个整数 0 <= ki <= m,表示编号 i 的男士心仪的女士的数量,然后包含 ki 个不同的整数分别表示心仪的女士的编号。
接下来m行,以相同的格式描述每一位女士心仪的男士。
输出:一个整数,表示最少需要准备的舞曲数目。

输入样例1
2 3
1 1
2 2 3
0
0
0
输出2

输入样例2
3 3
2 1 2
2 1 3
2 2 3
1 1
2 1 3
2 2 3
输出样例2
2

n,m = map(int,input().split())
dic = {}
for i in range(1,n+1):
    dic[i] = [int(v)+n for i, v in enumerate(input().split()) if i!=0]
#将女生的编号处理为i+n
for i in range(n+1,n+m+1):
    dic[i] = [int(v) for idx, v in enumerate(input().split()) if idx!=0]
#此时dic长的样子为  编号:[心动编号1,心动编号2...]
#{1: [4, 5], 2: [4, 6], 3: [5, 6], 4: [1], 5: [1, 3], 6: [2, 3]}
#return dic.values()中长度最长的
maxl = 0
for i in dic.values():
    maxl = max(maxl,len(i))
print(maxl)

一些错误的纯纯搞心态的尝试:
将题目理解为:一共要跳多少场舞,也就是每个人跟自己的心动对象都跳舞,减去两个人都相互心动

‘’‘写一个列表,里面装一些tuple,每个tuple存跳舞的两个人的编号
女生的编号在原本的i上加n,跟男生的编号区分
遍历到男生时,元组为tuple(男生,女生)
遍历到女生时,元组仍然为tuple(男生,女生)
最终将listset去重’‘’
n,m = map(int,input().split())
#男生
ln = []
for i in range(1,n+1):
    a = [int(v) for idx, v in enumerate(input().split()) if idx!=0]
    for j in a:
        ln.append((i,int(j)+n))
for i in range(n+1,n+m+1):
    b = [int(v) for idx, v in enumerate(input().split()) if idx!=0]
    if b == []:
        continue
    else:
        for j in b:
            ln.append((int(j),i))

不过通过这个错误常识也可以浅学一下:
如何快速简易建立列表:
list.append((tuple))要加两层括号

  • 3
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
华为机试是指华为公司的招聘过程中进行的编程考试,主要测试应聘者的编程能力和解决问的能力。根据提供的引用内容,有几道关于字符串处理、矩阵输出、斐波那契数列等方面的目。 其中,第一是计算字符串最后一个单词的长度,代码如下: a = input().split() b = a.pop() print(len(b)) 第二是统计一个字符串中某个字符出现的次数,不区分大小写,代码如下: a = input().lower() b = input().lower() c = a.count(b) print(c) 第三是将输入字符串中的字母转换成另一套规则的密码形式,代码如下: A = '1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' B = '122233344455566677778889999bcdefghijklmnopqrstuvwxyza' a = [] b = [] for i in A: a.append(i) for i in B: b.append(i) inpu = input() password = [] for i in inpu: if i in a: password.append(b[a.index(i)]) else: password.append(i) for i in password: print(i,end='') 还有其他目的代码我也可以为你提供,但由于篇幅限制,请告诉我你还想了解哪些目的答案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [华为机试,1-20python版](https://blog.csdn.net/DI_JIA_/article/details/106497677)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [华为机试python3题解(17 持续更新ing)](https://blog.csdn.net/qq_44576284/article/details/123911102)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值