2048 变体:线性区间数合并求最大生成数的 C++ 实现
以下是解决此问题的 C++ 代码: ```cpp #include <iostream> #include <vector> // 合并相邻相同的数 std::vector<long long> merge(std::vector<long long> nums) { bool merged = true; while (merged) { merged = false; for (int i = 0; i < nums.size() - 1; ++i) { if (nums[i] == nums[i + 1]) { // 合并相邻相同的数 nums[i] *= 2; // 移除第二个相同的数 nums.erase(nums.begin() + i + 1); merged = true; } } } return nums; } // 找到数组中的最大值 long long findMax(const std::vector<long long>& nums) { long long maxVal = 0; for (long long num : nums) { if (num > maxVal) { maxVal = num; } } return maxVal; } int main() { int T; std::cin >> T; for (int t = 0; t < T; ++t) { int n; std::cin >> n; std::vector<long long> nums(n); for (int i = 0; i < n; ++i) { std::cin >> nums[i]; } // 合并相邻相同的数 std::vector<long long> mergedNums = merge(nums); // 找到合并后数组中的最大值 long long maxNum = findMax(mergedNums); std::cout << maxNum << std::endl; } return 0; } ``` 代码解释 1. `merge` 函数:该函数用于合并相邻相同的数。使用一个 `while` 循环,只要有合并操作发生,就继续循环。在每次循环中,遍历数组,找到相邻相同的数,将它们合并为一个数,并移除第二个相同的数。 2. `findMax` 函数:该函数用于找到数组中的最大值。遍历数组,记录最大值并返回。 3. `main` 函数:首先读取测试数据的组数 `T`。对于每组数据,读取数的数量 `n` 和数组元素。调用 `merge` 函数合并相邻相同的数,再调用 `findMax` 函数找到合并后数组中的最大值,并输出结果。 额外需要注意的逻辑点 1. 在 `merge` 函数中,每次合并操作后,数组的长度会发生变化,因此需要注意循环的边界条件。 2. 由于 `a_i` 的最大值可能达到 `2^40`,因此需要使用 `long long` 类型来存储数组元素,避免溢出。 3. 在 `merge` 函数中,使用 `erase` 函数移除元素时,要确保移除的元素是正确的,避免移除错误的元素。 ######[AI写代码神器 | 692点数解答 | 2025-07-28 14:31:25]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- 高考毕业晚会难题:从学生能力值求最大默契程度的Python解法(字节豆包 | 487点数解答 | 2026-01-24 13:10:18)52
- 2048 游戏 HTML 代码框架解析与优化建议(字节豆包 | 138点数解答 | 2025-03-05 15:45:36)389
- 2048 游戏 HTML 框架搭建,后续开发建议大揭秘!(字节豆包 | 117点数解答 | 2025-03-11 00:06:25)340
- 深度剖析2048游戏HTML框架:待补JS逻辑与CSS样式全揭秘! (DeepSeek | 201点数解答 | 2025-04-19 11:50:42)241
- 2048游戏代码分析:优化建议与逻辑注意点揭秘(字节豆包 | 181点数解答 | 2025-04-29 20:58:02)232
- 2048 游戏 HTML 框架搭建与完善指南(字节豆包 | 202点数解答 | 2025-05-27 00:27:24)263
- C++编程:求解核晶学院早会方阵中被排除学生数量及代码详解(字节豆包 | 360点数解答 | 2025-08-02 20:21:28)372
- 2048位学生早会组方阵,Python编程算出最多完整行数! (DeepSeek | 234点数解答 | 2025-08-15 18:58:16)158
- Python 编程:计算核晶学院早会方阵外被排除学生人数及开发注意点 (DeepSeek | 225点数解答 | 2025-08-15 19:02:29)212
- 核晶学院早会方阵难题:2048 名学生编程算出被排除人数及开发注意要点(DeepSeek | 271点数解答 | 2025-08-15 19:03:02)131
- 核晶学院早会:2048 位学生组方阵,编程算出多少人被排除在外!(字节豆包 | 107点数解答 | 2025-11-29 22:17:36)48