设计思路:
从数组第一个数开始循环,依次向后相加,如果得到和比先前的和大则重置最大值为当前,如果的得到的和为负,再加会影响最大值,所以则重置为0,循环完后如果是0,则说明所有数均为负,只需找出最大值即可
源代码:
#include<iostream> using namespace std; #include<vector> int main() { int i,len; int max=0,sum=0; cout<<"请输入数组长度;"; cin>>len; int *array = new int[len]; cout<<"请输入数组内容:"<<endl; for(i=0;i<len;i++) { cin>>array[i]; } for(i=0;i<len;i++) { sum = sum + array[i]; if(sum<0) { sum = 0; } if(sum>max) { max = sum; } } if(max == 0) { max = array[0]; for(i=1;i<len;i++) { if(array[i]>max) { max = array[i]; } } } cout<<"最大子数组和为"<<max<<endl; delete[] array; }
结果截图: