求连续的子数组的和
郭志伟&王扣柱
具体思路:
1.创建一个数组,首先在主函数里判断是否全为负数,若全部是负数则直接选出最大值即可,否则调用addMax(int n,int*a)函数
2.在addMax函数里首先设置max=0,再设置一个中间值median=0;
3.for循环从数组的第一个数开始加起median=median+a[i];如果值为负就舍去,在下次循环时从新给median赋值一个新的数值,如果和大于0则与max比较,若大于max就max=median,否则继续循环重复上述步骤直到循环结束
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 |
#include<iostream> using
namespace std; int addMax( int
n, int *a) { int
i,max=0,median=0; for (i=0;i<n;i++) { if (median<0) median=a[i]; else median=median+a[i]; if (max<median) max=median; } return
max; } int
main() { int
a[7]={-1,-4,5,-6,9,8,-1}; int
i,m=0,max=0; for (i=0;i<7;i++) //判断是否全为负数 { if (a[i]<0) m++; } if (m=7) { max=a[0]; for (i=1;i<7;i++) { if (max<a[i]) max=a[i]; } } else { max=addMax(7,a); } cout<<max<<endl; return
0; } |
原文:http://www.cnblogs.com/guozw/p/3606396.html