競技プログラミング用 知識集積所
whileループ
最終更新:
sport_programming
-
view
雑な説明
変数の中身次第でコードを何回も実行する。
同じような処理を何度も繰り返したい場合に。
主に何回繰り返すことになるかわからない場合に。
同じような処理を何度も繰り返したい場合に。
主に何回繰り返すことになるかわからない場合に。
レベル
ABCのA問題以降。
基本的な記述
while (条件式) { 繰り返し実行したいコード }
条件式に使える基本的な記述
if分岐参照。
詳細な解説
if分岐は条件を満たしてコードを実行した後は下に進む
例えば
例えば
int n = 1; if (n<10) { n *= 2; }
の場合は、nが1から2になった後、そのまま下へ進む。
whileループは条件を満たしてコードを実行した後は判定に戻る。
例えば
例えば
int n = 1; while (n<10) { n *= 2; }
の場合は、nが1から2になった後、もう一度n<10かどうかを判定する。
2は10より小さいので、もう一度実行されてnが4となり、またn<10かどうかを判定する。
4は10より小さいので、もう一度実行されてnが8となり、またn<10かどうかを判定する。
8は10より小さいので、もう一度実行されてnが16となり、またn<10かどうかを判定する。
16は10より小さくないので、ループを終了し、下へ進む。
2は10より小さいので、もう一度実行されてnが4となり、またn<10かどうかを判定する。
4は10より小さいので、もう一度実行されてnが8となり、またn<10かどうかを判定する。
8は10より小さいので、もう一度実行されてnが16となり、またn<10かどうかを判定する。
16は10より小さくないので、ループを終了し、下へ進む。
break;
ループを無理矢理終了させる。
while (i<0) { // 何かのコード if (j==0) break; //ここから // 何かのコード //↓ } //↓ // 何かのコード //ここに飛ぶ
二重ループ(未作成)を両方一気に抜けたい場合は、何かフラグを用意して、内側のループを抜けた直後に「フラグが立っていたらbreak;」を書く。
continue;
ループを無理矢理次に行く。
while (i<0) { //ここに飛ぶ // 何かのコード //↑ if (j==0) break; //ここから // 何かのコード } // 何かのコード
break;とは異なり、その回だけを終了してもう1回条件の判定からやり直す。
注意点
if分岐も参照。
無限ループを起こさないように注意。
判定条件が満たされ続ける限り、100回でも10000回でも5000兆回でも繰り返される。
A問題やB問題で実行に長時間かかっている場合、これをやらかした可能性が高い。
判定に使われている何かが毎回変わるか、どこかでbreak;するかを保証できるコードを書くこと。
A問題やB問題で実行に長時間かかっている場合、これをやらかした可能性が高い。
判定に使われている何かが毎回変わるか、どこかでbreak;するかを保証できるコードを書くこと。
類似アルゴリズム
条件に合えば1回だけ実行する。