做题第一步,看大佬的代码
https://blog.csdn.net/weixin_43364559/article/details/108642371?biz_id=102&utm_term=%E6%9C%80%E5%A4%A7%E5%AD%90%E6%AE%B5%E5%92%8C%E5%8A%A8&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-108642371&spm=1018.2118.3001.4187
除了普普通通的求解之外,我加了一个可以求最大字段开始和结束位置的变量。
#include<iostream> using namespace std; int main() { int n; while(cin>>n) { int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } int b=0; int max=0; int p=0; //定义p为最大子段开始位置,q为最大字段结束位置 int q=0; for(int i=0;i<n;i++) { if(b>0) { b+=a[i]; } else{ b=a[i]; } if(b>max) { if(b==a[i]) { p=i; //如果b==a[i]说明最大子段变为了从a[i]开始的位置 q=i; } else { q=i; //否则最大子段开始位置没变,但是b>max说明b变大了,也就是最大子段结束位置变长了,q=i; } max=b; } } cout<<"最大子段从"<<p+1<<"到"<<q+1<<endl; cout<<"最大字段和为"<<max<<endl; } return 0; }