要求数组中子数组和的最大值用了两次循环的办法,
方案1:块内先比较大小,一块一块的进行,需要嵌套循环
方案2:两个数的子数组先比较,然后三个数的,四个数的.....再比较,可以不嵌套循环但感觉不够方便,所以没用。
方案1,2见图片分析
源码:
#include<iostream>
using namespace std;
int max()
{
int h=10;
int a[10]={9,-3,-4,5,6,-67,-8,-9,0,-12};//定义数组
int n=a[0];
for(int i=0;i<h;i++)//循环比较
{
int m=a[i];
for(int j=i+1;j<h;j++)
{
m=m+a[j];//数据累加
if(m>=n)
n=m;
}
}
for(int j=0;j<h;j++)//与每个数组成员比较,看哪个最大
if(a[j]>n)
n=a[j];
return n;
}
int main()
{
int b=max();
cout<<b<<endl;
return 0;
}
测试数据:0,-1,-2,-3,-4,-5,-6,-7,-8,-9 输出:0;
测试数据:1,2,5,-9,0,-2,-6,-7,-8,-11; 输出:8;
测试数据:-1,2,5,0,-2,10,-5,-6,-7,5; 输出:15;