[2024年3月10日]第15届蓝桥杯青少组stema选拔赛C++中高级(第二子卷、编程题(4))
参考程序代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> nums(n);
int totalSum = 0;
// 输入数组并计算总和
for (int i = 0; i < n; ++i) {
cin >> nums[i];
totalSum += nums[i];
}
// 计算前缀和数组
vector<int> prefix(n + 1, 0); // prefix[i] 表示 nums[0] 到 nums[i-1] 的和
for (int i = 1; i <= n; ++i) {
prefix[i] = prefix[i - 1] + nums[i - 1];
}
int minDiff = INT_MAX;
// 遍历所有可能的分割点
for (int i = 1; i < n; ++i) {
int leftSum = prefix[i]; // 左半部分的和
int rightSum = totalSum - leftSum; // 右半部分的和
int diff = abs(leftSum - rightSum); // 计算差值
minDiff = min(minDiff, diff); // 更新最小差值
}
cout << minDiff << endl;
return 0;
}