最大连续子段和
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
- 上传者