2022.1.22 华为OD-机试题


总共3道编程题,我还是考这种题考少了,机考的时候有点懵,考完回头看才发现自己太菜了哈哈哈,不多说上代码(回来之后重新做的)

  • 第1题(还没写完???)

   https://blog.nowcoder.net/n/d906173636514377a3438623ae3bf7a2

给定一个仅包含0和1的N*N二维矩阵,请计算二维矩阵的最大值,计算规则如下:
每行元素按下标顺序组成一个二进制数(下标越大越排在低位),二进制数的值就是该行的值。矩阵各行值之和为矩阵的值。
允许通过向左或向右整体循环移动每行元素来改变各元素在行中的位置。 比如:
[1,0,1,1,1]向右整体循环移动2位变为[1,1,1,0,1],二进制数为11101,值为29。
[1,0,1,1,1]向左整体循环移动2位变为[1,1,1,1,0],二进制数为11110,值为30。
输入描述:
输入的第一行为正整数,记录了N的大小,0 < N <= 20。
输入的第2到N+1行为二维矩阵信息,行内元素半角逗号分隔。
输出描述:
矩阵的最大值
def func1():
    # n = int(input())
    n = 2
    mock_row = "1,1"
    sum_max = 0
    i = 0
    while i < n:
        row_max = 0
        # row = input().replace(",", "")
        row = mock_row.replace(",", "")
        #怎么移位???
        for i in range(n):
            print()
        # 移位之后算最大值
        if int(row, 2) >row_max:
            row_max=int(row, 2)
        sum_max += row_max
        i += 1
    return sum_max
  • 第2题
https://leetcode-cn.com/circle/discuss/fhOTlt/
某探险队负责对地下洞穴进行探险。探险队成员在进行探险任务时,随身携带的记录器会不定期地记录自身的坐标,但在记录的间隙中也会记录其他数据。探索工作结束后,探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。

仪器记录坐标时,坐标的数据格式为(x,y),如(1,2)、(100,200),其中0设定探险队总部的坐标为(0,0),某位置相对总部的距离为:xx+yy。
若两个座标的相对总部的距离相同,则第一次到达的坐标为最远的足迹。
若记录仪中的坐标都不合法,输出总部坐标(0,0)。
备注:不需要考虑双层括号嵌套的情况,比如sfsdfsd((1,2))。
输入描述:
字符串,表示记录仪中的数据。
如:ferga13fdsf3(100,200)f2r3rfasf(300,400)
输出描述:
字符串,表示最远足迹到达的坐标。
如: (300,400)
示例1
输入
ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)
输出
(5,10)
说明
记录仪中的合法坐标有3个: (3,10), (3,4), (5,10),其中(5,10)是相距总部最远的坐标, 输出(5,10)。
示例2
输入
asfefaweawfaw(0,1)fe
输出
(0,0)
说明:记录仪中的坐标都不合法,输出总部坐标(0,0)
def func2(info):
    length = len(info)
    max_index = "(0,0)"
    i = 0
    while i < length:
        max_dis = 0
        # 一对对 查找()位置
        l_index = info.find("(", i)
        r_index = info.find(")", i)
        i = r_index + 1
        if l_index >= 0 and r_index >= 0:
            temp = info[l_index + 1:r_index].split(",")
        else:
            break
        if temp[0][0:1:] != '0' and temp[1][0:1:] != '0':
            x = int(temp[0])
            y = int(temp[1])
            if 0 < x < 1000 and 0 < y < 1000 and (x ** 2 + y ** 2) > max_dis:
                max_dis = (x ** 2 + y ** 2)
                max_index = "(" + temp[0] + "," + temp[1] + ")"
    return max_index
  • 第3题

https://blog.csdn.net/Angel_Emma/article/details/100546831
假设有一组非负整数,对数据元素重新排列,使其构成的整数最大,输出该整数。如输入11,20,3,7.输出732011
def func3(mock_input):
    nums = mock_input.split(" ")
    length = len(nums)
    # 将所有nums[i]转换为int
    # nums = list(map(int, nums))
    for i in range(length):
        for j in range(i + 1, length):
            if nums[i] + nums[j] < nums[j] + nums[i]:
                temp = nums[i]
                nums[i] = nums[j]
                nums[j] = temp
    return "".join(nums)


相关