尺取り法について質問があり、投稿させていただきました。
尺取り法は、累積和と似た考え方で、配列内を一つ前を動かし、一つ後ろを前に動かしと繰り返していくことまではわかりました。
今回、苦戦している問題は、配列がない状態での尺取り法の使い方です。
ネットや本で調べたところ、あるコードがもう少しでわかりそうなところまで来ています。
これが、そのコードです。
#include<iostream>
using namespace std;
int main(){
int n;
while(1){
cin >> n;
if(n == 0)break;
int s,t,cnt,sum;
s = 1;
t = 2;
sum = 3;
cnt = 0;
while(1){
if(s > n)break;
else if(sum < n || s == t)sum += ++t;
else if(sum > n)sum -= s++;
else if(sum == n){cnt++;sum -= s++;}
}
cout << cnt << endl;
}
return 0;
}
質問は、どうしてs,t,sumはそれぞれ1,2,3という数値が代入されているのでしょうか?
ここがわかれば、かなり道は開けてくると思います。皆様のお力をお借りしてもよろしいでしょうか。
よろしくお願いします。
以下は、このコードの問題です。
問題:http://judge.u-aizu.ac.jp/onlinejudge/d ... sp?id=2197
問題文です。
あなたは数か月に渡る受験戦争を勝ち抜き,晴れてICPC大学に入学することができた.入学手続きの日,大学のキャンパス内では熱狂的なサークルの勧誘活動が行われており,あなたは大量のパンフレットを受け取って帰ってきた.部屋に戻ってきたあなたは受け取ったパンフレットの中から気になる一枚を見つけた.そのパンフレットは大学の広報部から渡されたものだった.
パンフレットには以下のような問題が記されていた.
和が N となるような,連続する2つ以上の正の整数の組み合わせは,何組存在するでしょうか?例えば, 9 は 2+3+4 と 4+5 の 2通りの組み合わせがあります.
この問題の答えが気になったあなたは,プログラムを書いてその答えを調べることにした.したがって,あなたの仕事は,入力として与えられる正の整数 N に対して,問題の答えを出力するプログラムを書くことである.