华为机考真题 -- 小华最多能得到多少克黄金

题目描述:

小华按照地图去寻宝,地图上被划分成 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

输出描述:

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

示例1:
输入
40 40 18

输出
1484
说明:当k=18时,小华能够进入方格(10, 10),因为1+0+1+0=2<=18;
同理,小华不能够进入方格(36, 38),因为3+6+3+8=20?

示例2:
输入
4 5 7


输出
20

C++源码:

#include <iostream>
#include <vector>
using namespace std;

const int MAX = 51;
int m, n, k;
int grid[MAX][MAX]; // 用于记录每个格子是否有黄金,1表示有黄金,0表示没有或已访问
int dx[] = { -1, 0, 1, 0 }; // 上下左右四个方向的横坐标偏移量
int dy[] = { 0, 1, 0, -1 }; // 上下左右四个方向的纵坐标偏移量

bool isValidCell(int x, int y) {
    // 判断当前坐标是否在地图范围内
    return x >= 0 && x < n && y >= 0 && y < m;
}

// 计算数字的数位之和
int digitSum(int num) {
    int sum = 0;
    while (num) {
        sum += num % 10;
        num /= 10;
    }
    return sum;
}

void initializeGrid() {
    // 根据题目条件初始化地图,只有坐标数位之和不大于k的格子才初始化为有黄金
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            if (digitSum(i) + digitSum(j) <= k) {
                grid[i][j] = 1; // 满足条件的格子设为有黄金
            }
            else {
                grid[i][j] = 0; // 其他格子默认无黄金或视为障碍
            }
        }
    }
}

int dfs(int x, int y) {
    // 深度优先搜索获取最多黄金数量
    if (!isValidCell(x, y)) return 0; // 不安全的位置返回0
    if (grid[x][y] == 0) return 0; // 已访问过或没有黄金的位置返回0
    grid[x][y] = 0; // 标记为已访问
    int maxGold = 0;
    for (int i = 0; i < 4; ++i) {
        int newX = x + dx[i];
        int newY = y + dy[i];
        maxGold = max(maxGold, dfs(newX, newY)); // 递归探索四周并取最大值
    }
    return maxGold + 1; // 加上当前位置的黄金
}

int main() {
    cin >> m >> n >> k;
    initializeGrid(); // 根据k值初始化地图
    cout << dfs(0, 0) << endl; // 从(0,0)开始搜索
    system("pause");
    return 0;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
华为OD机考真题是指华为公司在招聘过程中所使用的在线机考试题目。这些题目旨在评估应聘者的技术能力、逻辑思维以及解决问题的能力。以下是对华为OD机考真题解读的简要说明。 华为OD机考真题的内容丰富多样,主要涵盖计算机科学、网络技术、算法设计、数据结构等多个领域。对于应聘者来说,这些题目不仅要求具备扎实的专业知识,还要求能够将知识应用于实际场景中,并能够灵活运用、创新思考。 在解答华为OD机考真题时,应聘者需要具备良好的解题思路和方法。首先,应聘者需要仔细阅读题目,理解题意和要求,明确问题的关键点。其次,应聘者需要运用所学知识和技能分析问题,并制定解决方案。此时,良好的逻辑思维和分析能力是十分重要的。最后,应聘者需要将解决方案转化为具体的代码实现或解题步骤,并进行测试和验证。 华为OD机考真题的目的是为了筛选出具备优秀技术能力和解决问题能力的人才。在解题过程中,华为注重考察应聘者的创新能力和解决问题的能力,不仅关注结果,还关注解决问题的思路和方法。因此,应聘者在回答真题时除了要给出正确的答案,还需要展现出对问题的全面思考和独立思考的能力。 总之,华为OD机考真题的解答需要应聘者具备扎实的专业知识、良好的解题思路、逻辑思维能力和解决问题的能力。这些真题旨在筛选出具备创新思维和解决问题能力的优秀人才。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值