与えられた数列の内いくつかの数が連続した和の最大値を求めるprogramを書け。という問題です。
http://rose.u-aizu.ac.jp/onlinejudge/Pr ... 22&lang=jp
#include<cstdio>
using namespace std;
int main(){
while(1){
long long int n;
scanf("%lld",&n);
if(n == 0){
break;
}
long long int wa[10001]={0};
for(long long int loop=1;loop<=n;loop++){
long long int aa;
scanf("%lld",&aa);
wa[loop] = wa[loop-1] + aa;
}
long long int max=-3333333;
int flag=0;
for(long long int loop=1;loop<=n;loop++){
for(long long int fir=1;fir<=n-loop+1;fir++){
long long int ret=wa[fir+loop-1]-wa[fir-1];
if(ret > max || flag==0){
max=ret;
flag=1;
}
}
}
if(max!=0){
printf("%lld\n",max);
}
}
}
このようなprogramを組んだのですが、Wrong Answerとなってしまいます。何がダメなのでしょうか。Wrong Answerとなる理由が分からず、全てlong longにしてみたのですが…
無題
Re:無題
>入力例と出力例との関係
例の3つの数列
1)-5 -1 6 4 9 -6 -7
2)1 2 3 2 -2 -1 1 2 3 2 1 -2 1
3)1000 -200 201
に対して、
1)の場合は、3~5項の和、6 + 4 + 9 == 19
2)の場合は、1~11項の和、1 + 2 + 3 + 2 + -2 + -1 + 1 + 2 + 3 + 2 + 1 == 14
3)の場合は、1~3項の和、1000 + -200 + 201 == 1001
が、"連続する項の和の最大値"になります。
ponさんへ、
"連続する項"とは、1項でもいいのでしょうか、それとも、2項以上でしょうか。
