题目源:http://acm.hdu.edu.cn/showproblem.php?pid=1231
简单的最大子段和问题,只是加上了求子段的起点和终点
#include<stdio.h> int num[10005]; int main() { int n; while(scanf("%d",&n)) { if(n==0) break; int flag=0; for(int i=0;i<n;i++) { scanf("%d",&num[i]); if(num[i]>=0) flag=1; } int sum1=-99999,b=0,c=0; for(int i=0;i<n;i++) { if(b>0) b+=num[i]; else b=num[i]; if(b>sum1) {sum1=b;c=i;}//C用来保存终点 } int sum2=0,d; for(int i=c;i>=0;i--)//有终点向前找起点 { sum2+=num[i]; if(sum2==sum1) d=i; } if(!flag) printf("0 %d %d/n",num[0],num[n-1]); else printf("%d %d %d/n",sum1,num[d],num[c]); } return 0; }