给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。
例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。
输入样例:
7
1 2 3 -5 0 7 8
输出样例:
16 7
这题很简单 上AC代码 提示都在代码里面了
#include <iostream> using namespace std; int a[101]; int n, i, ans, len, tmp, beg; int main() { cin >> n; for (i = 1; i <= n; i++) cin >> a[i]; tmp = 0; ans = 0; len = 0; beg = 0; //为了便于后续统计元素个数,初始值为0 for (i = 1; i <= n; i++) { if (tmp + a[i] > ans) { ans = tmp + a[i]; len = i - beg; } //如果加上第 i 元素的当前子数列之和等于之前找到的最大元素之和 //且当前子数列元素个数大于之前找到的元素个数 else if (tmp + a[i] == ans && i - beg > len) len = i - beg; if (tmp + a[i] < 0) //如果元素之和小于0,舍弃这个连续子数列 { beg = 1; //记录下标 i tmp = 0; } else //否则当前连续子数列继续统计元素之和 { tmp=tmp+a[i]; } } cout << ans << " " << len << endl; return 0; }
Copyright 2020 © IamXuWu All rights reserved.