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.结果截图
4.合作过程
我和黄仡用了83分钟实现了这个功能,黄仡负责编码,我负责复审。首先。我们交流了彼此的想法和设计思路。都是在原先代码的基础上做出一些修改,如在执行n次循环后在从头考虑,但是复杂度较高,在这过程中,我们探索到了新的思路。就是取max和Array - min的较大值。
5.合作照