C++ 实现数字魔法转换:最少能量消耗求解攻略与注意要点
```cpp #include <iostream> #include <queue> #include <unordered_set> #include <climits> using namespace std; // 自定义结构体用于存储当前的数字和消耗的能量 struct Node { long long num; int energy; Node(long long n, int e) : num(n), energy(e) {} }; // 广度优先搜索函数,用于寻找最少消耗的能量 int bfs(long long a, long long b, int k) { queue<Node> q; unordered_set<long long> visited; // 将起始数字和消耗能量为0的节点加入队列 q.push(Node(a, 0)); visited.insert(a); while (!q.empty()) { Node current = q.front(); q.pop(); // 如果当前数字等于目标数字,返回消耗的能量 if (current.num == b) { return current.energy; } // 魔法1:删除数a的个位 if (current.num > 10) { long long newNum = current.num / 10; if (visited.find(newNum) == visited.end()) { q.push(Node(newNum, current.energy + k)); visited.insert(newNum); } } // 魔法2:在数a的末尾增加一个0 long long newNum2 = current.num * 10; if (visited.find(newNum2) == visited.end()) { q.push(Node(newNum2, current.energy + k)); visited.insert(newNum2); } // 魔法3:将数a的个位修改为另一个数 long long base = current.num / 10 * 10; for (int i = 0; i < 10; i++) { long long newNum3 = base + i; if (newNum3 > 0 && visited.find(newNum3) == visited.end()) { q.push(Node(newNum3, current.energy + k)); visited.insert(newNum3); } } } return -1; // 无法完成任务 } int main() { long long a, b; int k; // 读取输入 cin >> a >> b >> k; // 调用广度优先搜索函数 int result = bfs(a, b, k); cout << result << endl; return 0; } ``` 代码 1. 定义了一个结构体 `Node` 用于存储当前的数字和消耗的能量。 2. `bfs` 函数实现了广度优先搜索算法,使用队列和哈希集合来记录已访问的数字。 3. 在 `bfs` 函数中,分别实现了三种魔法操作,并将新生成的数字加入队列。 4. 如果找到目标数字,返回消耗的能量;如果队列为空仍未找到,返回 -1 表示无法完成任务。 5. `main` 函数读取输入,并调用 `bfs` 函数,最后输出结果。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 要注意数字可能会超出 `int` 类型的范围,因此使用 `long long` 类型来存储数字。 2. 在进行魔法操作时,要确保生成的新数字是正整数,避免出现非法数字。 3. 哈希集合的使用可以避免重复访问相同的数字,但是要注意插入和查找操作的性能,尤其是在处理大量数据时。 ######[AI写代码神器 | 812点数解答 | 2025-11-23 20:49:59]
- C++ 实现:精准统计给定范围 [L, R] 内数字 2 出现的次数及代码详解(字节豆包 | 401点数解答 | 2026-02-05 21:17:05)44
- C++实现:统计[L, R]范围内数字2出现的次数及代码详解(字节豆包 | 489点数解答 | 2026-02-07 17:12:26)51
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)350
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)193
- Python:用正则表达式从含多种字符的字符串中提取英文、数字和中文单词(GPT | 522点数解答 | 2024-05-31 19:05:27)319
- Python:用正则表达式结合 split 思路提取一行字符串中的英文、数字和中文单词 (GPT | 399点数解答 | 2024-05-31 19:07:31)315
- 繁体字编码代码修改:人物名字合法性验证函数转简体版(字节豆包 | 325点数解答 | 2024-10-21 18:57:01)291
- 计算区间 n 到 m 中数字 x 出现次数的 Python 实现与详解(字节豆包 | 289点数解答 | 2025-12-07 17:14:59)79
- Python 实现:计算区间 n 到 m 中数字 x 出现的次数(字节豆包 | 322点数解答 | 2025-12-13 21:37:08)81
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)322
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)387
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)244