1.定义一个vector数组,向里面赋值。然后去除数组末尾的负数。如果全是负数,找到最大的。然后从头相加,直到和为负数,,并重新开始累积和,并随时与当前最大值比较。
2.源代码
#include <iostream> #include<vector> #include<algorithm> using namespace std; void main() { vector <int> Array; //声明vector数组。 int temp = 0; //用于输入。 int sum = 0; //储存当前最大和。 int max = 0; //储存最大和。 cout << "请输入几个整数(用空格隔开,以字符结束)" << endl; while(cin >> temp) { Array.push_back(temp); //将数字进栈到Array中。 } if(Array[Array.size() - 1] < 0) { max = Array[Array.size() - 1]; } while(Array[Array.size() - 1] < 0) //去除数组末尾的负数。如果全是负数,找到最大的。 { if(max <= Array[Array.size() - 1]) { max = Array[Array.size() - 1]; } Array.pop_back(); if(Array.size() == 0) { cout << "最大子数组和为:" << max << endl; return; } } for(int i = 0;i < Array.size();i++) { if(sum < 0) //如果当前数组和小于零,重置sum。 { sum = 0; } else { sum += Array[i]; } if(sum > max) //当前和与最大值比较。 { max = sum; } } cout << "最大子数组和为:" << max << endl; vector<int>().swap(Array); //释放vector数组。 }
3.结果截图