华为题库刷题记录

浅记录一下

只刷了一小部分,后面再补了

题源牛客-华为机考

HJ3 明明的随机数

将每一次输入的m值存储temp里时最好转换为整形,方便后面按小到大排序输出
解决重复数问题可以通过创建空数组,依次添加判断

n = int(input())
temp = []
ans = []
for i in range(n):
    m = input()
    temp.append(int(m))
for each in temp:
    if each not in ans:
        ans.append(each)
for i in sorted(ans):
    print(i)
HJ4 字符串分隔

输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;

•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
输入描述:

连续输入字符串(每个字符串长度小于等于100)
输出描述:

依次输出所有分割后的长度为8的新字符串
示例1

输入:

abc

输出:

abc00000

解答大于8时通过循环输出,str[:8]:前八项输出,下标(0~7),输出后更新str—>第八项(下标)及第八项往后的字符串;

不足八位:补上8减字符串长度

str = input()
empty = ""
while len(str) > 8:
    print(str[:8])
    str = str[8:]
str = str + '0'*(8-len(str))
print(str)
HJ5 进制转换

在这里插入图片描述思路一:
1、输入的字符串str1截取’0x’之后的字符放入str2,以str2生成的列表放入list1,方便转换后索引
2、A~F对应关系罗列字典(通过key索引value)
3、列表中字符转换整数(数字)存入list3
4、list3[-(i+1)],从最后一位开始计算,16^i

str1 = str(input())
str2 = str1[2:]
list1 = list(str2)
dict1 = {
   'A':'10','B':'11','C':'12','D':'13','E':'14','F':'15'}
list2 = [dict1[i] if i in dict1 else i for i in list1]
list3 = []
Sum = 0
for i in list2:
    list3.append(int(i))
for i in range(len(list3)):
    Sum += list3[-(i+1)]*pow(16,i)
print(Sum)

二、python毕竟是python,简洁不花里胡哨,直接进制转换
int函数,第一个参数是一个字符串,第二个参数是字符串的进制

print(int(input(), 16))
HJ6 质数因子

在这里插入图片描述假设输入的正整数num有质因数abcdef…
那么可以写成num = abcdf*…
若f是最大质因数,则num除去先前的质因子之后的数应该是小于等于mm
计算方法:
以180为例
从2开始,最小质因子开始循环
180能被2整除---->90
存放第一个质因子2---->res(后面需要join()函数拼接,需要装换为字符串)
再接着90往下循环,直到num不能被2整除,prfc+1
继续循环直到不能被3整除,prfc+1
因为前面整除2的数都被筛掉了,prfc = 4也不会满足第二个循环条件,其他类似
直到180//2//2//3//3 = 5 < 5
5 | num----->res[ ]
最后注意输出答案以空格为分开
join()函数用法
‘sep’.join(seq)
sep:分隔符,可以为’ , ‘、’ : '空格等等
seq:要连接的元素序列、字符串、元组、字典

num = int(input())
#primefactors质数因子
prfc = 2
res = []
while num >= prfc * prfc:
    while num % prfc == 0:
        num = num // prfc
        res.append(str(prfc))
    prfc +=1
if num > 1:
    res.append(str(num))
print(' '.join(res))
HJ7 取近似值
n = float(input())
m = int(n)
if n - m >= 0.5:
    print(m+1)
else:
    print(m)
HJ8 合并表记录

在这里插入图片描述代码来源大佬题解,这份答案写的挺好
split()默认两个参数,分别是分隔符和分隔数量,作用是将一个字符串按照分隔符分隔成一个list[ ]
split() 不传递参数时默认空格分隔,且无数量限制

get()函数在这里有两个参数,第一个是确定要分配值的键,第二个是拟定给键分配一个初值
get(key,0)-----获取key对应的value,并令初值为0

sorted()函数 sorted(list,key),key—排序规则
默认生成新的list(不覆盖原有排序),按key从小到大排,相当于sorted(list,reverse = False)

以题目示例为例
输入0 1时,以首项为键,后输入为值,以此构建字典索引

n = int(input())
arr = []
dict1 = {
   }
for i in range(n):
    arr = input().split()
    key = int(arr[0])
    value = int(arr[1])
    dict1[key] = dict1.get(key,0) + value

for i in sorted(dict1):
    print(i,dict1[i])
HJ9提取不重复的整数
n = str(input())
m = n[::-1]
temp = ''
for i in m:
    if i not in temp:
        temp += i
print(temp)

m = n[::-1] 切片逆序输出(不要用sorted翻转)
之后字符串+拼接输出

HJ10 字符个数统计

算法和上述的一些题目一样,就不赘述了

str1 = input()
temp = ""
count = 0
for i in str1:
    if i not in temp:
        temp += i
        count += 1
print(count)
HJ11 数字颠倒
n = input()
print(n[::-1])
HJ12 字符串反转

代码同上

HJ13 句子逆序

所有单词之间用一个空格隔开
split()函数,不传入参数默认空格
[::-1]从后往前倒序重排

sentence = input().split()
arr = sentence[::-1]
ans = ''
for word in arr:
    ans = ans + word + ' '
print(ans)
HJ14 字符串排序
n = int(input())
list1 = []
for i in range(n):
    str1 = input()
    list1.append(str1)
for word in sorted(list1):
    print(word)
HJ15 求int型正整数在内存中存储时1的个数

以一个十进制数转二进制为例来分析过程
15
15/2=7…1
7/2=3…1
3/2=1…1
1/2=0…1
所以1111(从下往上)即15的二进制表达

n = int(input())
list1 = []
while n // 2 >= 0 and n != 0:
    list1.append(n%2)
    n = n // 2
print(list1.count(1))

或者使用进制转换函数
其他进制转换十进制可以用int(num,num所属的进制数)
如二进制转十进制

num = '0101'
print(int(num,2))
#输出5

若将十进制转换为其他有:
十进制—>十六进制 hex()
十进制—>八进制 oct()
十进制—>二进制 bin()
所以本题第二种写法

n = int(input())
m = str(bin(n))
print(m.count('1'))
HJ16 购物单
#购物单  进阶动态规划问题
#代码原文链接:https://blog.csdn.net/COCO56/article/details/124463397  原文大佬用了三种方法,代码非常漂亮

"""
输入 N m
从第二行到第m+1行,输入价格 重要度 主件/附件从属
v p q
50 5
20 3 5
20 3 5
10 3 0
10 2 0
10 1 0
输出
130
说明:
由第1行可知总钱数N为50以及希望购买的物品个数m为5;
第2和第3行的q为5,说明它们都是编号为5的物品的附件;
第4~6行的q都为0,说明它们都是主件,它们的编号依次为3~5;
所以物品的价格与重要度乘积的总和的最大值为10*1+20*3+20*3=130
"""
N , m = map(int,input().split())
main_obj = {
   }    #主件
accessory = {
   }    #附件
for i in range(1,m+1):
    v,p,q = map(int,input().split())
    if q == 0 :    #是主件
        main_obj[i] = [v,v*p]     #写入主件价格,和购买改主件带来的满意度 //相当于{3:[10,30]}
    else:
        if q in accessory:        #如果是附件
            accessory[q].append([v,v*p])  #附件2  {5:[[20,60][20,60]]}  索引附件1的话:accessory[5][0][0]
        else:
            accessory[q] = [[v,v*p]] #列表存储 附件1{5:[[20,60]]}
dp = [0]*(N+1)     #最后求dp[50],因为下标从0开始,第50项为dp[49],所以此处为N+1
#这里的main_parts.items(),输出为 {3:[10,30],4:[10,20],5:[10,10]}
#循环对应的key 和value为
#        3    [10,30]
#        4    [10,20]
#        5    [10,10]
for key,value in main_obj.items():    #遍历主件字典
    price = []    #花费数额
    satis = []    #获得的满意度
    price.append(value[0])  # 购买该主件的价格     value[0]=main_obj[key][0][0]
    satis.append(value[1])  # 花费该价格获得的满意度
    if key in accessory:    # 如果该主件还有附件
        price.append(price[0] + accessory[key][0][0])    #主件加上附件1的价格
        satis.append(satis[0] + accessory[key][0][1])    #主件加上购买附件1的满意度
        if len(accessory[key]) > 1 :  #如果有两个附件
            price.append(price[0] + accessory[key][1][0])    #主件加上附件2的价格
            satis.append(satis[0] + accessory[key][1][1])  # 主件加上购买附件2的满意度
            price.append(price[0] + accessory[key][0][0] + accessory[key][1][0
华为HCIP(华为认证的网络专家)刷题软件是一款专门为华为网络技术认证培训的学员设计的学习辅助工具。该软件提供了丰富的题库刷题模式,帮助学员提高知识水平,巩固和加深对网络技术的理解和掌握。 华为HCIP刷题软件的特点如下: 1. 题库全面:软件的题库涵盖了HCIP认证培训的各个模块,包括网络技术基础、网络管理与优化、网络能力扩展等多个内容领域。学员可以根据自己的学习进度和需求,选择相关的题目进行刷题。 2. 答题模式灵活:软件支持不同的刷题模式,如随机刷题、按章节刷题等。学员可以根据自己的学习计划和时间安排选择适合自己的刷题模式,灵活地进行学习。 3. 提供答案解析:每道题目都会提供详细的答案解析,学员可以在做题过程中及时了解自己的答案是否正确,并深入理解其中的知识点和原理。这样可以帮助学员更好地掌握网络技术知识。 4. 练习效果统计:软件会记录学员的刷题情况,包括答对率、用时等。学员可以通过练习效果统计了解自己的学习进度和弱项,有针对性地进行学习和提升。 总之,华为HCIP刷题软件是一款专为华为网络技术认证学员设计的学习辅助工具,通过提供全面的题库、灵活的刷题模式、答案解析和练习效果统计等功能,帮助学员提高知识水平,达到更好的学习效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值