设计思想:
- 随机生成数组(含有正数与负数)。
- 求所有子数组:按数组长度进行数组的划分(因为要求数组是连续的)。
- 计算:从第一个数开始做加法,若和大于第二个数,则继续加下一个数(若加上第三个数的和大于第三个数,则重复进行此操作;小于第三个数,则舍掉前面所有数,并继续就重复进行此操作);若小于第二个数,则舍掉第一个数。
实现代码:
#include <iostream>
#include<time.h> using namespace std;
int maxSum(int* a, int n) {
int sum=0;
//其实要处理全是负数的情况,很简单,如稍后下面第3点所见,直接把这句改成:"int sum=a[0]"即可
//也可以不改,当全是负数的情况,直接返回0,也不见得不行。
int b=0;
for(int i=0; i<n; i++) {
if(b<0)
b=a[i];
else
b+=a[i];
if(sum<b)
sum=b;
}
return sum;
}
int main() {
int n=1000,k=0;
int *a=new int [n];
for( int i = 0 ; i < n ; i++) {
a[i] = rand()%20 - 10 ;
} for( int i = 0 ; i < n ; i++) {
cout<<a[i]<<" ";
}
for( int i = 0 ; i < n ; i++)//产生的数组都为负数时的情况 {
if(a[i]<0) {
k++;
}
}
if(n==k) {
for( int i = 1 ; i < n ; i++) {
k=a[0];
if(a[i]>k) {
k=a[i];
}
} c
out<<"最大和为:"<<k<<endl;
}
else {
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
cout<<"请输入数组长度:"<<endl; cin>>n;
cout<<"请输入数组元素:"<<endl;
for( int i = 0 ; i < n ; i++) {
cin>>a[i] ;
}
cout<<endl;
for( int i = 0 ; i < n ; i++)//产生的数组都为负数时的情况 {
if(a[i]<0) {
k++;
}
}
if(n==k) {
for( int i = 1 ; i < n ; i++) {
k=a[0];
if(a[i]>k) {
k=a[i];
}
}
cout<<"最大和为:"<<k<<endl;
}
else {
cout<<"最大和为:"<<maxSum(a,n)<<endl;
}
return 0;
}
结果截图:
实验总结:
总结:本次实验主要是在上次的基础上看看当输出的数组元素多的情况会有什么问题以及数组元素的值大的时候会出现的情况,从实际来看前者没出现问题,但在值大的时候会出现意外报错这说明程序不够完美。再就是本次实验是由两人结对完成,初步对配合有了些理解和感悟,两人间如何分配任务将会影响整个项目的进度,以及两个人都分配些什么任务应该是能让每个人发挥出特长,再就是时间的安排问题由于是配合肯定要为每个人划分时间按段时间的划分不合理也会导致一个人忙死一个人闲死,显然这是不合理的。
合作照: