标签:
1.设计思路
在(一)的基础上作出修改,修改大于小于号,求出字符串中子数组和最小和(与一中的最大和思路一致)。再用全数组的和减去最小和就是环字符串意义上的最大和。再与max(非循环数组意义上的最大值)比较,取大值。最后若max为零,则可能存在数组全负或零的情况,这时输出最大数组单元。
2.源代码
#include <iostream> #include<vector> #include<algorithm> using namespace std; void main() { vector <int> Array; //声明vector数组。 int temp = 0; //用于输入。 int sum = 0; //储存当前最小和。 int min = 0; //储存最小和。 int max = 0; int arraySum = 0; //储存数组和。 cout << "请输入几个整数(用空格隔开,以字符结束)" << endl; while(cin >> temp) { Array.push_back(temp); //将数字进栈到Array中。 } for(int i = 0;i < Array.size();i++) //求出数组总和。 { arraySum += Array[i]; } for(int i = 0;i < Array.size();i++) //求出非循环数组的最大值。 { sum += Array[i]; if(sum < 0) { sum = 0; } if(sum > max) { max = sum; } } for(int i = 0;i < Array.size();i++) //求出非循环数组的最大值。 { sum += Array[i]; if(sum > 0) { sum = 0; } if(sum < min) { min = sum; } } max = (max >= (arraySum - min))? max :(arraySum - min); //max取max和arraySum - min之间最大值。 if(max == 0) //若max为零,则输出最大的数组单元。 { max = Array[0]; for(int i = 1;i < Array.size();i++) { if(Array[i] > max) { max = Array[i]; } } } cout << "最大子数组和为:" << max << endl; vector<int>().swap(Array); //释放vector数组。 }
3.结果截图
标签:
原文地址:http://www.cnblogs.com/shenshenxin/p/5384171.html