程序填空题

最大连续子段和

题目描述

给出一个数列(元素个数不多于 100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。

例如:

数列为 4,−5,3,2,4 时,输出 9 和 3;

数列为 1,2,3,−5,0,7,8 时,输出 16 和 7。

程序代码

#include <iostream>
using namespace std;

int a[101];
int n,i,ans,len,tmp,beg,end;
int main(){
    cin >> n;
    for (i=1;i<=n;i++)
        cin >> a[i];
    tmp=0;
    ans=0;
    len=0;
    beg=          ;
    for (i=1;i<=n;i++){
        if (tmp+a[i]>ans){
            ans=tmp+a[i];
            len=i-beg;
        }
        else if (                 &&i-beg>len)
            len=i-beg;
        if (tmp+a[i]         ){
            beg=          ;
            tmp=0;
        }
        else
                       ;
    }
    cout << ans << " " << len << endl;
    return 0;
}

(1) ①处应填()。

A. 1
B. 0
C. n
D. 101

(2) ②处应填()。

A. tmp + a[i] > ans
B. tmp + a[i] = ans
C. tmp + a[i] > n
D. tmp + a[i] == ans

(3) ③处应填()。

A. < 0
B. < ans
C. < mp
D. < min(0, ans, tmp)

(4) ④处应填()。

A. 1
B. 0
C. n
D. i

(5) ⑤处应填()。

A. tmp += a[i]
B. tmp = i + 1
C. beg = i
D. beg = i + 1