競技プログラミング用 知識集積所

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より小さくないので、ループを終了し、下へ進む。

break;

ループを無理矢理終了させる。
while (i<0) {
  // 何かのコード
  if (j==0) break;   //ここから
  // 何かのコード     //↓
}                    //↓
// 何かのコード       //ここに飛ぶ
if分岐の中に書いた場合でも、ちゃんとループを抜ける。
二重ループ(未作成)の中に書いた場合は、内側のループのみ抜ける。

二重ループ(未作成)を両方一気に抜けたい場合は、何かフラグを用意して、内側のループを抜けた直後に「フラグが立っていたらbreak;」を書く。

continue;

ループを無理矢理次に行く。
while (i<0) {        //ここに飛ぶ
  // 何かのコード     //↑
  if (j==0) break;   //ここから
  // 何かのコード
}
// 何かのコード
break;とは異なり、その回だけを終了してもう1回条件の判定からやり直す。

注意点

if分岐も参照。

無限ループを起こさないように注意。

判定条件が満たされ続ける限り、100回でも10000回でも5000兆回でも繰り返される。
A問題やB問題で実行に長時間かかっている場合、これをやらかした可能性が高い。
判定に使われている何かが毎回変わるか、どこかでbreak;するかを保証できるコードを書くこと。

類似アルゴリズム

条件に合えば1回だけ実行する。

最もよくあるwhileループの使い方を、より書きやすくしたもの。
ループ回数がはっきりしている場合はforループの方が書きやすい。
ウィキ募集バナー