用的vector及引用,需要你自己改写成用指针形式。
/**
* 遍历数组, 以每个元素为启点, 求相邻4个元素和值, 记录最大和值及其起始元素的索引
*/
int getMaxSum(vector<int>& vec, vector<int>& res) {
int max_sum = 0; // 最大和值
int max_idx = 0; // 最大和值的第一个元素索引
// 不足4个数
if (vec.size() < 4) {
for (auto &e : vec) {
max_sum += e;
res.push_back(e);
}
return max_sum;
}
// 4个数以上
// 初始最大和值
max_sum = vec[0] + vec[1] + vec[2] + vec[3];
for (int i = 1; i < vec.size(); ++i) {
int sum = vec[i] + vec[(i + 1) % vec.size()] + vec[(i + 2) % vec.size()] + vec[(i + 3) % vec.size()];
if (max_sum < sum) {
max_sum = max(sum, max_sum);
max_idx = i;
}
}
for (int i = 0; i < 4; i++) {
res.push_back(vec[(max_idx + i) % vec.size()]);
}
return max_sum;
}
int main()
{
vector<int> a = { 8, 5, 13,15,3,11,6,7,22,10 };
vector<int> b;
int sum = getMaxSum(a, b);
cout << "最大的和值是:" << sum << endl;
cout << "参与求和的4个数是: ";
for (auto &e : b) {
cout << e << " ";
}
cout << endl;
return 0;
}