酷代码 AI
菜单
服务商

题目描述 现有 n n 个整数 a [ 1 ] , a [ 2 ] . . . a [ n ] a[1],a[2]...a[n],请你编写程序寻找一个黄金分隔点,使得分隔点左侧的数之和刚好等于分隔点右侧的数之和的两倍,如果无法找到这样的分割点,请输出 - 1 1。 输入格式 共 2 2 行, 第一行一个正整数 n n, 第二行 n n 个整数,依次为 a [ 1 ] a[1] ~ a [ n ] a[n]。 输出格式 一个整数,为分隔点的下标,若无法找到分隔点则输出 - 1 1。 以c++输出

```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点数解答]

相关提问
请收藏新域名:pdcd.cn
发财导航,免费问AI
实用工具查看更多
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]
数独游戏 [娱乐类]
经典推箱子 [娱乐类]
AI摸鱼五子棋 [娱乐类]