c++代码实现:判断是否存在正整数k使得a1%k+a2%k+……+an%k=s
时间: 2024-09-28 19:15:19 浏览: 30
在 C++ 中,可以使用动态规划来解决这个问题。首先,我们需要创建一个数组 `res` 来存储前缀和 `sum`,初始化为 `0`,然后遍历输入数组 `a`,每次将 `ai` 对 `k` 取模的结果加到对应位置的 `res` 上。最后,我们只需要查找是否存在某一项 `res[i]` 等于 `s` 即可。
以下是 C++ 代码实现:
```cpp
#include <vector>
bool checkSum(vector<int>& a, int s, int n) {
vector<int> res(n + 1, 0);
for (int i = 1; i <= n; ++i) {
res[i] = (res[i - 1] + a[i - 1]) % s; // 更新前缀和
}
// 查找是否存在 res[i] == s
for (int i = 0; i <= n; ++i) {
if (res[i] == s) {
return true;
}
}
return false;
}
int main() {
vector<int> a = {1, 2, 3, 4, 5};
int s = 10;
bool hasK = checkSum(a, s, a.size());
if (hasK) {
cout << "存在满足条件的 k" << endl;
} else {
cout << "不存在满足条件的 k" << endl;
}
return 0;
}
```
阅读全文