以下是解决此问题的 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` 函数移除元素时,要确保移除的元素是正确的,避免移除错误的元素。 [2025-07-28 14:31:25 | AI写代码神器 | 692点数解答]