文章
11
粉丝
20
获赞
4
访问
8.6k
#include<cstdio>
int main() {
int a, dp, maxT, left, right, leftmp, n;
while (scanf("%d", &n) != EOF) {
maxT = dp = left = right = 0; //初始化很重要!!!
bool flag = true; //标记是否全为负数
if (n == 0) break;
for (int i = 0; i < n; i++) {
scanf("%d", &a);
if (dp > 0) dp += a; //dp状态为正可以继续加
else if (a > 0) {
leftmp = a; dp = a; flag = false;
//leftmp记录下当前正数,可能之后会作为起点
}
else if (i == 0) leftmp = a; //记录下第一个数(如果最终全为负数)
if (a == 0) flag = false;
if (dp > maxT) {
maxT = dp; right = a; left = leftmp; //这里就体现了leftmp的作用
}
if (i == n-1 && maxT == 0 && flag) { right = a; left = leftmp; }
}
printf("%d %d %d\n", maxT, left, right);
}
}
登录后发布评论
暂无评论,来抢沙发