Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Maximum Sum"
https://onlinejudge.u-aizu.ac.jp/problems/0516
n 個の整数からなる数列 a1, a2, ..., an と正整数 k (1 ≤ k ≤ n) が与えられる.
このとき, 連続して並ぶ k 個の整数の和 Si = ai + ai+1 + ... + ai+k-1 (1 ≤ i ≤ n - k + 1) の最大値を出力するプログラムを作りなさい.
僕が作成、提出したコードは、以下のとおりです。
・Aizu Online Judge in C++ #Volume5 - 0516 : Maximum Sum
/* Aizu Online Judge in C++ #Volume5 - 0516 : Maximum Sum https://onlinejudge.u-aizu.ac.jp/problems/0516 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ while(1){ int n,k; cin>>n>>k; if(n==0 && k==0){ return 0; } vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } vector<int> v; for(int i=0;i<=n-k;i++){ int sum=0; for(int j=i;j<i+k;j++){ sum+=a[j]; } v.push_back(sum); } sort(v.rbegin(),v.rend()); cout<<v[0]<<endl; } }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。