```cpp #include <iostream> #include <vector> // 此函数用于寻找黄金分隔点 int findGoldenSplitPoint(const std::vector<int>& arr) { int n = arr.size(); // 先计算数组所有元素的总和 int totalSum = 0; for (int num : arr) { totalSum += num; } // 用于存储当前左侧元素的和 int leftSum = 0; for (int i = 0; i < n; ++i) { // 计算右侧元素的和 int rightSum = totalSum - leftSum - arr[i]; // 判断是否满足分隔点条件 if (leftSum == 2 * rightSum) { return i + 1; // 下标从1开始 } // 更新左侧元素的和 leftSum += arr[i]; } // 若未找到符合条件的分隔点,返回 -1 return -1; } int main() { int n; std::cin >> n; std::vector<int> arr(n); for (int i = 0; i < n; ++i) { std::cin >> arr[i]; } // 调用函数寻找黄金分隔点 int result = findGoldenSplitPoint(arr); std::cout << result << std::endl; return 0; } ``` 额外注意的逻辑点 1. 注意数组下标在本题中是从1开始的,而在C++中数组下标是从0开始的,所以返回结果时要进行 +1 操作。 2. 在计算右侧元素和的时候,要注意减去当前分隔点元素的值,避免重复计算。 3. 代码中先计算总和可以减少后续的重复计算,提高效率,在其他类似的需要计算总和的问题中可以借鉴此思路。 [2025-08-03 21:16:30 | AI写代码神器 | 437点数解答]