最大连续子段和

最大连续子段和

Attention

这是一道题目完善题,请直接在下面给出的代码进行操作,在数字序号处删掉序号填写代码语句即可。
下面有C++和C语言代码供大家选择,请大家选择一种自己熟悉的语言答题。
不要在代码风格上做过多的纠结。

Description

给出一个数列(元素个数不多于100),数列元素均为负整数、正整数、0。请找出数列中的一个连续子数列,使得这个子数列中包含的所有元素之和最大,在和最大的前提下还要求该子数列包含的元素个数最多,并输出这个最大和以及该连续子数列中元素的个数。例如数列为4,-5,3,2,4时,输出9和3;数列为1 2 3 -5 0 7 8时,输出16和7。

C++ Code

#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;
}

C Code

#include <stdio.h>

int a[101];
int n,i,ans,len,tmp,beg;

int main(){
      scanf("%d", &n);
      for(i=1;i<=n;i++)
          scanf("%d", &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 {
                 ⑤  ;
            }
      }
      printf("%d %d\n", ans, len);
      return 0;
}

信息

ID
1032
难度
8
分类
(无)
标签
递交数
11
已通过
5
通过率
45%
被复制
1
上传者