题目要求如下:
解题思路:从第二项开始到数组末尾,比较该项与前一项相加后值是否变大,若变大,则将当前项的值置为他与前一项的和,否的话就不变。这样处理结束后,第n项的值,就是原数组前n项中的最大连续子数组的和,最后只要取处理完毕后的数组中最大的一项即可。
C++代码如下:
#include<iostream> using namespace std; void main() { int s[100]; int n,max; //输入数组长度 cin >> n; for (int i = 0;i < n;i++) { //输入数组元素 cin>> s[i]; } //max初始化为s[0] max = s[0]; for (int i = 1;i < n;i++) { //比较与前一项相加值是否会增大 if ((s[i] + s[i - 1] )> s[i]) { s[i] = s[i] + s[i - 1]; } //更新max的值 if (max < s[i])max = s[i]; } cout << "最连续大子集和:" << max << endl; }