- 论坛徽章:
- 0
|
求一个数组中最大的相邻元素之和
原帖由 "yuxh" 发表:
,3,-6,3,4,3,-2,5,2,-3};
start 0, end 8, sum 14
sorry,还没完全领会精神就乱发程序了.
再来,反正脸皮厚
- #include <stdio.h>;
- #include <stdlib.h>;
- void MaxSum(int *m, int n)
- {
- int i, start=0, end=0, max, sum, istart=0, iend=0, sum2=0, start2=0;
- max=m[0];
- for(i=0;i<n && m[i]<=0;i++)
- {
- if(m[i]>;max)
- {
- max=m[i];
- start=i;
- }
- }
- if(i==n)
- {
- printf("start %d, end %d, sum %d\n", start, start, max);
- return;
- }
- end=start2=start=istart=i;//加了个END.因为发现如果只有一个正数时END有误.
- for(i=n-1;i >;-1 && m[i]<=0;i--);
- iend=i;
- sum2=sum=max=m[start];
- for(i=istart+1;i<=iend;i++)
- {
- sum+=m[i];
- sum2+=m[i];
- if(sum>;max)
- {
- end=i;
- max=sum;
- }
- if(m[i-1]<=0 && m[i]>;0)
- {
- sum2=m[i];
- start2=i;
- }
- if(sum2>;max)
- {
- start=start2;
- end=i;
- sum=max=sum2;//这里又修改了.唉.惭愧.
- }
- }
- printf("start %d, end %d, sum %d\n", start, end, max);
- }
- int main()
- {
- int m[10] = {2, 3, -6, 3, 4, 3, -2, 5, 2, -3};
- MaxSum(m, 10);
- return 0;
- }
复制代码 |
|