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

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

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

文章目录

  • HJ41 称砝码
  • ★★★ HJ42 学英语
  • HJ43 迷宫问题
  • ★★★ HJ44 Sudoku
  • HJ45 名字的漂亮度
  • HJ46 截取字符串
  • HJ48 从单向链表中删除指定值的节点
  • HJ50 四则运算
  • HJ51 输出单向链表中倒数第k个结点
  • HJ52 计算字符串的编辑距离
  • HJ53 杨辉三角的变形
  • HJ54 表达式求值
  • HJ55 挑7
  • HJ56 完全数计算
  • HJ57 高精度整数加法
  • HJ58 输入n个整数,输出其中最小的k个
  • HJ59 找出字符串中第一个只出现一次的字符
  • HJ60 查找组成一个偶数最接近的两个素数

HJ41 称砝码

在这里插入图片描述
每次加一块砝码,得到所有组合,使用set去重。这是一种思路,我看很大一部分同学都是使用n种不同砝码进行组合,那样的话时间复杂度稍微低一点,实际看个人觉得哪种方式更好理解。

while True:
    try:
        n = int(input())
        m = input().split(" ")
        x = input().split(" ")
        # mx为所有砝码,比如示例mx为[1, 1, 2]
        mx, l = [], {0}
        for i in range(n):
            mx.extend([int(m[i])] * int(x[i]))
        for i in mx:
            # 每次加一块砝码,使用union(并集)得到新去重的组合,如果不使用union则稍微麻烦一点,需要考虑循环中改变set
            l = l.union({i+j for j in l})
        print(len(l))
    except:
        break

★★★ HJ42 学英语

在这里插入图片描述

num1 = ['zero','one','two','three','four','five','six',
       'seven','eight','nine','ten','eleven','twelve',
       'thirteen','fourteen','fifteen','sixteen',
       'seventeen','eighteen','nineteen']
num2 = [0,0,'twenty','thirty','forty','fifty','sixty',
       'seventy','eighty','ninety']
 
# 100以内转英文
def n2w(n):
    if n > 0:
        if n < 20:
            word.append(num1[n])
        else:
            word.append(num2[n//10])
            if n%10 != 0:
                word.append(num1[n%10])
 
# 1000以内转英文
def hun(n):
    if n >= 100:
        word.append(num1[n//100])
        word.append('hundred')
        if n % 100 != 0:
            word.append('and')
    n2w(n%100)
 
while True:
    try:
        n = int(input())
    except:
        break
    else:
        word = []
        a = n % 1000  # 个十百位
        b = (n//1000) % 1000  # 个十百千
        c = (n//1000000) % 1000  #个十百m
        d = n // 1000000000    # 个十百b
         
        if d > 0:
            hun(d)
            word.append('billion')
        if c > 0 :
            hun(c)
            word.append('million')
        if b > 0:
            hun(b)
            word.append('thousand')
        if a > 0 :
            hun(a)
        print(' '.join(word))

HJ43 迷宫问题

在这里插入图片描述
在这里插入图片描述

while True:
    try:
        m, n = list(map(int, input().split()))
        maze = []
        for _  in range(m):
            maze.append(list(map(int, input().split())))
             
        def walk(i, j, pos=[(0, 0)]):
            if j+1 < n and maze[i][j+1] == 0: # 向右
                if (i, j+1) not in pos:
                    walk(i, j+1, pos + [(i, j+1)])
            if j-1 >= 0 and maze[i][j-1] == 0: # 向左
                if (i, j-1) not in pos:
                    walk(i, j-1, pos + [(i, j-1)])
            if i+1 < m and maze[i+1][j] == 0: # 向下
                if (i+1, j) not in pos:
                    walk(i+1, j, pos + [(i+1, j)])
            if i-1 >= 0 and maze[i-1][j] == 0: # 向上
                if (i-1, j) not in pos:
                    walk(i-1, j, pos + [(i-1, j)])
            if (i, j) == (m-1, n-1): # 到达出口
                for p in pos:
                    print('(' + str(p[0]) + ',' + str(p[1]) + ')')
                     
        walk(0, 0)
    except:
        break

★★★ HJ44 Sudoku

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def check(sudoku,i,j):  #判断这个数填入数独的i,j位置是否合理
    for k in range(9):
        if(sudoku[i][k] == sudoku[i][j]) and (k != j): #若是这一列有重复的数据,认为这个数非法
            return False
    for k in range(9):
        if(sudoku[k][j] == sudoku[i][j]) and (k != i): #若是这一行有重复的数据,认为这个数非法
            return False
    m = 3*(i // 3) #m,n分别是i,j位置所在的3*3格子的最左上角的位置
    n = 3*(j // 3)
    for k in range(3):
        for z in range(3):
            if(sudoku[m+k][n+z] == sudoku[i][j]) and ((m+k) != i) and ((n+z) != j): #判断所在3*3格子是否有重复的数据
                return False
    return True #若都没有,那么认为这个数在重复上面没有问题
def find_sudoku(sudoku):
    for i in range(9):
        for j in range(9):
            if(sudoku[i][j] == 0): #若是找到为0的
                for t in range(1,10): #在这个位置依次填入1-9尝试
                    sudoku[i][j] = t
                    if(check(sudoku,i,j)) and (find_sudoku(sudoku)): #若是满足数独要求,而且填完这个数之后的0也能被成功填写
                        return True #认为成功
                    sudoku[i][j] = 0 #如果1-9都不行认为是之前填的数不合适,恢复这次填的数
                return False #返回之前一个false
    return True 走到这一步认为所有的空都被填满,返回成功
while True:
    try:
        sudoku = []
        sudoku_index = []
        for i in range(9):
                a = list(map(int,input().split()))
                sudoku.append(a) #将数独输入
        find_sudoku(sudoku)
        for i in range(9):
            print(*sudoku[i])
    except:
        break

HJ45 名字的漂亮度

在这里插入图片描述

while True:
    try:
        #获取输入的单词数量
        N = int(input())
        while N:
            #获取输入的单词
            data = input()
            #去重存入字典
            d = {}
            for word in data:
                if word not in d:
                    d[word] = 1
                else:
                    d[word] = d[word] + 1
            d1 = sorted(d.values() ,reverse=True)
            ans = 0
            m = 0
            for word in d1:
                ans = ans + (26-m)*word
                m = m + 1
            print(ans)
            N = N - 1
    except:
        break

HJ46 截取字符串

在这里插入图片描述

while True:
    
    try:
        str_input = input()
        k = int(input())
        
        print(str_input[:k])
        
    except:
        break

HJ48 从单向链表中删除指定值的节点

在这里插入图片描述
在这里插入图片描述

while True:
    try:
        num = list(map(int,input().split()))
        n = len(num)
        new = []
        for i in range(2,n-1,2):
            if num[i+1] not in new: #没有就追加
                new.append(num[i+1])
                new.append(num[i])
            else: #有就插队
                ind = new.index(num[i+1])
                new.insert(ind+1,num[i])
        #循环删除节点
        try:
            while True:
                new.remove(num[-1])
        except:
            pass
        #输出
        new = [str(x) for x in new]
        print(' '.join(new))
    except:
        break

HJ50 四则运算

在这里插入图片描述

while True:
    try:
        s=input()
        s=s.replace('{', '(')
        s=s.replace("}",")")
        s=s.replace("[","(")
        s=s.replace("]",")")
        print(int(eval(s)))
    except:
        break

HJ51 输出单向链表中倒数第k个结点

在这里插入图片描述
链表做法,直接逆向遍历

class Node(object):
    def __init__(self, val=0):
        self.val = val
        self.next = None
         
         
while True:
    try:
        head = Node()
        count, num_list, k = int(input()), list(map(int, input().split())), int(input())
        while k:
            head.next = Node(num_list.pop())
            head = head.next
            k -= 1
        print(head.val)
    except EOFError:
        break

HJ52 计算字符串的编辑距离

在这里插入图片描述

#动态规划经典题目
#nowcoder不能导入numpy模块,只能手工创建二维数组
#重点注意二维数据的创建方法,重点注意其横竖坐标,注意注意
#dp = [[1 for i in range(n+1)] for j in range(m+1)],横坐标是 n, 竖坐标是m
while True:
    try:
        str1 = input()
        str2 = input()
        m = len(str1)
        n = len(str2)
         
        dp = [[1 for i in range(n+1)] for j in range(m+1)]#重点注意二维数据的创建方法,重点注意其横竖坐标,注意注意
        for i in range(n+1):
            dp[0][i] = i
        for j in range(m+1):
            dp[j][0] = j
             
        for i in range(1,m+1):
            for j in range(1,n+1):
                if str1[i-1] == str2[j-1]:#如果当前两个字母相同,则跳过,步数不增加
                    dp[i][j]=dp[i-1][j-1]
                else:  #如果两个字母不同,则有三种方式可以达成,删除、插入、替换,选择最小的前状态,步数加1
                    dp[i][j] = min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1
        print(dp[m][n])
    except:
        break

HJ53 杨辉三角的变形

在这里插入图片描述

在这里插入图片描述

import sys
alt=[2,3,2,4] #发现规律,从第三行开始2324循环
for line in sys.stdin:
    n=int(line.strip())
    if n<3:
        print(-1)
    if n>=3: 
        print(alt[(n-3)%4]) #所以对4求余,映射到上面alt列表中

HJ54 表达式求值

在这里插入图片描述

while True:
    try:
        print(int(eval(input())))
    except:
        break

HJ55 挑7

在这里插入图片描述

while True:
    try:
        n = int(input())
        c = 0
        for i in range(1,n+1):
            if i % 7 == 0:
                c += 1
            elif str(i).count('7') > 0 :
                c += 1
        print(c)
    except:
        break

HJ56 完全数计算

在这里插入图片描述

while True:
    try:
         n=int(input())
         L=[]
         for i in range(1,n):
             p=0
             for y in range(1,i):
                 if i%y==0:
                     p=p+y
             if i==p:
                 L.append(p)
         print(len(L))
    except:
        break

HJ57 高精度整数加法

在这里插入图片描述
python语言支持大整数,不受位数限制

因此转成整型之后直接相加即可

while True:
    try:
        n1 = int(input())
        n2 = int(input())
        print(n1+n2)        # 直接输出整型数字相加之和的结果
    except:
        break

HJ58 输入n个整数,输出其中最小的k个

在这里插入图片描述
step1:首先输入n,k这两个参数(因为input()后是字符串类型,所以需要将n,k转换为int类型,这时我们需要使用list(map())函数);
step2:其次,输入一个整数数组num(原理同上,也需要转换为int型,同样需要list(map())函数;)
step3:使用sorted()函数,对num整数数组进行排序;
step4:使用for循环,遍历“排序后的、且使用切片切割好的”整数数组num;
step5:逐个打印,并使用空格分开

n,k = list(map(int,input().split()))
num = list(map(int,input().split()))
num = sorted(num)
for i in num[:k]:
    print(i,end=' ')

HJ59 找出字符串中第一个只出现一次的字符

在这里插入图片描述

while True:
    try:
        s = input()
 
        for i in s:
            if s.count(i) == 1:
                print(i)
                break
        else:
            print('-1')
    except:
        break

HJ60 查找组成一个偶数最接近的两个素数

在这里插入图片描述
从输入的偶数的一半开始找,到2,找出其中所有素数,再判断另外一个数是不是素数

while True:
    try:
        n = int(input())
        prime = []
        for i in range(int(n/2), 1,-1):
            for x in range(2,i):
                if i%x == 0 or (n-i)%x == 0:
                    break
            else:
                prime.append(i)
        print(prime[0])
        print(n-prime[0])
    except:
        break

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/4057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于EB工具的TC3xx_MCAL配置开发06_PWM模块配置

目录 1.概述2. EB配置2.1 PWM->General2.2 PWM->Channel2.2.1 PWMChannel配置2.2.2 PwmChannelClass配置2.2.3 GTM通道选取2.3 MCU关联配置2.4 Port关联配置1.概述 本篇开始我们基于EB Tresos工具对英飞凌TC3xx系列MCU的MCAL开发进行介绍,结合项目经验对各MCAL外设的开…

Docker:关于 Dockerfile 编写优化的一些笔记整理

写在前面 分享一些 Dickerfile 构建镜像优化方式的笔记理解不足小伙伴帮忙指正 对每个人而言&#xff0c;真正的职责只有一个&#xff1a;找到自我。然后在心中坚守其一生&#xff0c;全心全意&#xff0c;永不停息。所有其它的路都是不完整的&#xff0c;是人的逃避方式&#…

【React全家桶】Flux与Redux

&#x1f39e;️&#x1f39e;️&#x1f39e;️ 博主主页&#xff1a; 糖 &#xff0d;O&#xff0d; &#x1f449;&#x1f449;&#x1f449; react专栏&#xff1a;react全家桶 &#x1f339;&#x1f339;&#x1f339;希望各位博主多多支持&#xff01;&#xff01;&a…

javaScript扫雷

文章目录一、准备工作1.图片2.html2.css3.js二、初始化数据1. 配置文件2.工具文件3.逻辑文件1.main函数2.init函数1.随机生成雷2.css添加三、完整代码1.html2.js3.css一、准备工作 1.图片 需要找三张图片 旗子的图片 炸弹的图片 爆炸的图片 2.html html文件夹新建一个html文…

区块链基本原理

区块链的起源 创始者介绍 姓名&#xff1a;中本聪&#xff08;英语&#xff1a;SatoshiNakamoto&#xff09;&#xff0c;自称日裔美国人&#xff0c;日本媒体常译为中本哲史&#xff0c;此名是比特币协议及其相关软件Bitcoin-Qt的创造者&#xff0c;但真实身份未知。 中本聪于…

Chapter9.1:线性系统状态空间基础(上)

该系列博客主要讲述Matlab软件在自动控制方面的应用&#xff0c;如无自动控制理论基础&#xff0c;请先学习自动控制系列博文&#xff0c;该系列博客不再详细讲解自动控制理论知识。 自动控制理论基础相关链接&#xff1a;https://blog.csdn.net/qq_39032096/category_10287468…

解决Visual Studio设置C++标准 但是_cplusplus始终为199711

目录场景复现Visual Studio官方说明C标准对应表解决方案方法一 恢复__cplusplus宏方法二 使用_MSVC_LANG宏场景复现 我在VS2022偶然的一次测试C标准开发环境&#xff0c;发现无论我怎么修改C语言标准&#xff0c;输出的__cplusplus宏总是199711。 Visual Studio官方说明 链…

【C++】vector模拟实现及其应用

文章目录vector的介绍vector的使用及其实现vector的定义vector iterator 的使用vector空间增长问题vector的增删查改vector的介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素…

开源 Swallow 代码审计系统体验

最近在哔哩哔哩看 到Swallow 代码审计系统的宣传,发现功能比较适合我目前的工作需要,安装使用了一下,简单做了一个笔记,分享给有需要的朋友. 底层架构为蜻蜓编排系统,墨菲SCA,fortify,SemGrep,hema 项目地址:https://github.com/StarCrossPortal/swallow 安装与使用视频教程:ht…

hexo 搭建个人博客记录

看B站的程序羊的关于搭建hexo博客的方法自己搭了一个博客&#xff0c;链接是 手把手教你从0开始搭建自己的个人博客 |无坑版视频教程| hexo 下面就视频所讲做做笔记&#xff0c;以后可以回来查看&#xff0c;推荐小伙伴想搭建hexo博客的可以去看看这个视频。 1. 安装Node.js…

react项目路由组件懒加载和路由传值方式

项目实战 使用useRoutes配置路由&#xff0c;结合插槽配置用户登录检测。 用户登录成功进入login 直接系统主界面 路由模块抽离 整体代码外移 { path: "/admin", element: ( <Author name"admin"> <Index /> </Author> ), }, { path:…

「SAP ABAP」OPEN SQL(七)【GROUP BY | HAVING | ORDER BY】

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后端的开发语言A…

基于matlab已知地球两点坐标求取距离和方位角函数distance

一、语法1.语法1[arclen,az] distance(lat1,lon1,lat2,lon2)&#xff1b;R6371.393; % 地球半径&#xff0c;单位&#xff1a;km地点1&#xff08;维度lat1&#xff0c;经度lon1&#xff09;&#xff0c;地点2&#xff08;维度lat2&#xff0c;经度lon2&#xff09;假设地点1和…

001 鸿蒙系统环境搭建及运行hello world

1 下载与安装DevEco Studio 在HarmonyOS应用开发学习之前&#xff0c;需要进行一些准备工作&#xff0c;首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 DevEco Studio提供了Windows版本…

PCIe基础

PCIe基础 PCI Express&#xff0c;简称PCI-E&#xff0c;官方简称PCIe&#xff0c;是计算机总线的一个重要分支&#xff0c;它沿用既有的PCI编程概念及信号标准&#xff0c;并且构建了更加高速的串行通信系统标准。目前这一标准由PCI-SIG组织制定和维护。 拓扑 配置空间 在 P…

【Python】plt.title()函数

plt.title() 是 matplotlib 库中用于设置图形标题的函数。 一、基本语法如下 plt.title(label, fontdictNone, locNone, padNone, **kwargs)其中&#xff1a; label 是要设置的标题文本&#xff0c;可以是字符串类型或者是数学表达式。fontdict 是一个可选的参数&#xff0c…

QT 基于AES加解密的使用,解析java端发来的密文

背景 java端往ukey中写授权信息&#xff0c;C端从ukey中读取授权信息。 java端写入的授权信息是加密的&#xff0c;并且要可逆。 因为java端采用的是AES加密的&#xff0c;所以我(C端)也只好采用对等形式搞定了。 使用的库 开发环境&#xff1a;Win10 Qt5.13 QT中AES加解密…

uniapp项目打包apk相关(androidStudio,Hbuildx,dCloud)

1、先注册和登陆dCloud平台&#xff0c;管理应用信息。 需要准备的参数(3个) APP_ID&#xff08;如&#xff1a;__UNI__123ABCD&#xff09; 包名&#xff08;如&#xff1a;com.hx.mhoa&#xff09; 应用签名&#xff08;应用sha1&#xff0c;应用md5&#xff0c;应用sha256&…

HLS协议格式

HLS协议格式 ES流&#xff08;Elementary Stream&#xff09;&#xff1a;基本码流&#xff0c;不分段的音频、视频或者其他信息的连续码流PES流&#xff0c;把基本码流ES分割成段&#xff0c;并加上相应头文件打包成形的打包基本码流PS流&#xff08;Program Stream&#xff…

一文解析RISC-V SiFive U54内核——中断和异常

中断 U54内核支持M模式和S模式中断。默认情况下&#xff0c;所有中断都在M模式下处理 。对于支持S模式的 hart&#xff0c;可以有选择地将中断委托给S模式。 U54中断架构如下&#xff1a; U54内核还支持两种类型的 RISC-V 中断&#xff1a;本地 和全局 。 本地中断 &#xf…