求和
2026-07-22 11:47:15
发布于:湖北
20阅读
0回复
0点赞
需要判断能否将数组分割成两部分,使得这两部分的元素和相等。
#include <iostream>
using namespace std;
int main() {
int t;
cin>>t;
while (t--) {
int n;
cin >> n;
int a[n];
long long ts = 0; // 使用 long long 防止总和溢出
// 1. 读取数组并计算总和
for (int i = 0; i < n; ++i) {
cin >> a[i];
ts += a[i];
}
// 2. 寻找平衡点
long long cs = 0;
bool isb = false;
// 遍历到 n-2 即可,因为题目要求 i < n (右边至少剩一个数)
// 对应下标 i 从 0 到 n-2
for (int i = 0; i < n - 1; ++i) {
cs += a[i];
// 如果前缀和的两倍等于总和,说明左右相等
if (cs * 2 == ts) {
isb = true;
break;
}
}
// 3. 输出结果
if (isb) {
cout << "Yes" << "\n";
} else {
cout << "No" << "\n";
}
}
return 0;
}
这里空空如也



有帮助,赞一个