描述
int型范围内,将m(m<1000)个数围成一个圈,给定一个数n(n<=m),求连续的n个数使得和最大。输出最大和及始末位置。
输入
多组测试数据,每组数据首行是两个数m,n,表示m个数,求n个连续最大和。
输出
输出三个数:sum,b,e,分别表示最大和,开始位置,结束位置。
样例输入
5 3
4 2 3 1 5
4 2
2 3 4 5
样例输出
11 5 2
9 3 4
提示
最大和相等且位置不唯一,则输出b较小的位置,如:
5 2
4 3 2 4 5
输出:9 4 5
#include <stdio.h>
/*环之最大和*/
int main(int argc, char **argv)
{
int m,n,b,e,i,j;
int buf[1000]={0};
/*几个数相加可能超过int范围*/
long long max,s;
while(~scanf("%d%d\n", &m, &n)){
for(i=0; i<m; i++){
scanf("%d", &buf[i]);
}
max=0;
for(i=0; i<m; i++){
s=0;
for(j=0; j<n; j++){
s += buf[(i+j)%(m)];
}
if(max<s){
max=s;
b=i+1;
if(i+n>m){
e = (i+n)%m;
}else{
e = (i+n)%(m+1);
}
}
}
printf("%lld %d %d\n", max, b, e);
}
return 0;
}