华为OD机试统一考试 - 小华地图寻宝

题目描述

小华按照地图去寻宝,地图上被划分成 m 行和 n 列的方格,横纵坐标范围分别是 [0, n-1] 和 [0, m-1]。

在横坐标和纵坐标的数位之和不大于 k 的方格中存在黄金(每个方格中仅存在一克黄金),但横坐标和纵坐标之和大于 k 的方格存在危险不可进入。小华从入口 (0,0) 进入,任何时候只能向左,右,上,下四个方向移动一格。

请问小华最多能获得多少克黄金?

输入描述

坐标取值范围如下:

  • 0 ≤ m ≤ 50
  • 0 ≤ n ≤ 50

k 的取值范围如下:

  • 0 ≤ k ≤ 100

输入中包含3个字数,分别是m, n, k

输出描述

输出小华最多能获得多少克黄金

用例

输入

40 40 18

输出

1484

说明

输入

5 4 7

输出

20

说明

题目解析

本题题目描述有些歧义

在横坐标和纵坐标的数位之和不大于 k 的方格中存在黄金(每个方格中仅存在一克黄金)

但横坐标和纵坐标之和大于 k 的方格存在危险不可进入

这两句话有点矛盾,所谓横坐标和纵坐标的数位之和,比如:

  • 横坐标是10,那么横坐标的数位和 = 1 + 0 = 1
  • 纵坐标是21,那么纵坐标的数位和 = 2 + 1 = 3
  • 横坐标和纵坐标的数位之和 = 1 + 3 = 4

但是横坐标和纵坐标之和

  • 横坐标是10,纵坐标是21,横坐标和纵坐标之和 = 10 + 21 = 31

和考友确认后,上面“横坐标和纵坐标之和”其实也是数位之和,即

横坐标和纵坐标数位之和大于 k 的方格存在危险不可进入

因此,本题其实就是图的遍历问题,可以使用深度优先搜索DFS,或者广度优先搜索BFS处理。

从(0,0)点开始,然后进行深搜或者广搜,其上下左右四个新位置,新位置是否可以进入的条件是:

  • 新位置不越界
  • 新位置未被访问过
  • 新位置的横坐标、纵坐标的数位之和 <= k

每进入一个位置,则获得黄金1克。

import Foundation

class DFSCalss {
    // 该方法用于求解 0 ~ maxSize - 1 各个数对应的数位和,提前计算好,避免后期重复计算某个数的数位和// 数位和数组
    var digitSums: [Int] = []

    // 横坐标最大值
    var m = 0
    // 纵坐标最大值
    var n = 0
    // 方格中存在黄金的

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024华为OD机试卷题 文章被收录于专栏

本专栏给大家提供了华为2024最新华为OD 题目汇总。华为OD机试刷题记录机考算法题库,帮助你上岸华为。提供C++/Java、JavaScript、Python四种语言的解法。

全部评论
小华地图寻宝
点赞 回复 分享
发布于 09-20 15:42 四川

相关推荐

昨天 10:52
蚌埠坦克学院 C++
金山干嘛,挂了又发笔试,复活赛还是KPI
小苏_秋招版:我投了三个base,做了两次笔试然后复筛都挂了,今天他还发笔试,有点离谱了
投递金山WPS等公司10个岗位 > 软件开发2024笔面经 牛客创作赏金赛
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
三年之期已到我的offer快到碗里来:9硕都比不上9本
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务