PTA甲1007 第六个点怎么都不对

#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这种特殊的情况来讲的