注意题目要求是输出首尾元素,而不是首尾元素的下标,自己隔了很久敲一下代码,两次有点差别啊!
第一次:
#include<stdio.h> int main(){ int i,j,K,flag=0; int sub[10008]; int frst=10008,last,maxs=-1,sum=0; int temp=0; scanf("%d",&K); for(i=0;i<K;i++){ scanf("%d",&sub[i]); if(sub[i]>=0) flag=1; } if(flag==0){ printf("0 %d %d\n",sub[0],sub[K-1]); } else{ for(i=0;i<K;i++){ sum=sum+sub[i]; if(sum>maxs){ maxs=sum; frst=temp; last=i; } else if(sum<0){ sum = 0; temp=i+1; } } printf("%d %d %d\n",maxs,sub[frst],sub[last]); } return 0; }
第二次:
#include<stdio.h> int main(){ int i,j,n; int arr[10005]; int sum=0,imax=-1,fst=0,last=0,mark=0,ftmp=0; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&arr[i]); sum=sum+arr[i]; if(sum>0&&mark==0){ ftmp=arr[i]; mark=1; } if(sum>imax){ imax=sum; fst=ftmp; last=arr[i]; } if(sum<0){ sum=0; mark=0; } } if(imax==-1) printf("0 %d %d\n",arr[0],arr[n-1]); else printf("%d %d %d\n",imax,fst,last); return 0; }