#CS50203. 完善程序2-字符处理-3最大连续子段和

完善程序2-字符处理-3最大连续子段和

完善程序:最大连续子段和

给出一个数列(元素个数不多于 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;

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. ①处应填( ){{ select(1) }}
  • 1
  • 0
  • n
  • 101
  1. ②处应填( ){{ select(2) }}
  • tmp+a[i]>ans
  • tmp+a[i]=ans
  • tmp+a[i]<ans
  • tmp+a[i]==ans
  1. ③处应填( ){{ select(3) }}
  • <0
  • <ans
  • <mp
  • <min(0,ans,tmp)
  1. ④处应填( ){{ select(4) }}
  • 1
  • 0
  • n
  • i
  1. ⑤处应填( ){{ select(5) }}
  • tmp+=a[i]
  • tmp=i+1
  • beg=i
  • beg=i+1