#include<bits/stdc++.h>
using namespace std;
int main() {
int k;
cin >> k;
int s[100001];
int max = 0;
int tmp = 0;
int first = 0;
int last = 0;
int n = 0;
int flag = 0;
for(int i = 0; i < k; i++) {
cin >> s[i];
tmp += s[i];
if(s[i] >= 0) {
flag = 1;
}
if(tmp > max) {
max = tmp;
last = i;
}
if(tmp < 0) {
tmp = 0;
}
}
printf("%d ",max);
int t = max;
while(max != 0) {
max -= s[last - n];
n++;
}
while(1) {
if(s[last - n] != 0) {
break;
}
n++;
}
max = t;
if(max != 0) {
printf("%d ",s[last - n + 1]);
printf("%d\n",s[last]);
} else if(max == 0 && flag == 0) {
printf("%d ",s[0]);
printf("%d\n",s[k - 1]);
} else {
printf("0 ");
printf("0");
printf("\n");
}
return 0;
}
/*
1.负数和0 :输出 0 0 0
2.已知报错
5
0 0 5 0 -1
理想输出
5 0 0
实际
5 0 5
*/
if(tmp >= max) //第21行
改一下就可以解决你代码下面的用例,其他类似的也可以解决
原因的话,那就只针对0这种特殊的情况来讲的