| English | 意味 |
|---|---|
| accumulator/əˈkjuːmjʊleɪtə/ | 累加器 |
初期値がゼロの最大値は結果を生み出さない
- 配列に −8, −3, −11 が含まれています。max をゼロから始めると、配列に含まれない最大値が得られてしまいます。
- この非空配列については、max を a[0] から始めます。後の値との比較により −8 が −3 に更新され、そのまま保持されます。
ループのパターン: 蓄積
- ループパターンとは、一般的なタスクに対する再利用可能なレシピのことです。蓄積子(アキュムレーター) パターンは、反復を通じて累計合計や積を構築します。
- ループ内で
sum = 0を想不到、sum = sum + xを開始します。累計合計は変化し、負の値を加えると減少することがあります。同様の考え方が累計カウント(count++)や累計最大値にも当てはまります。
ループ内の分岐
- 条件に一致する要素のみを対象にするために、ループ内に
ifを配置します。「偶数の数を数える」場合:ループとif (x % 2 == 0) count++;を使用します。 - ループはすべての要素を訪問し、
ifがどの要素を処理するかを決定します。選択と反復の組み合わせは、ほとんどのアルゴリズムの核心です。
最大値の探索
- 最大の値を見つけるには、
max変数を保持し、より大きい値が見つかったら更新します。配列が非空であることを確認し、maxを最初の値から始め、残りを調べます。指定されていない「非常に小さい数」は実際の入力をすべて超える可能性があります。 - ループ内に
if (x > max) { max = x; }を置きます。ループ終了後、maxに見つかった最大の値が格納されています。
蓄積器パターン
sumは実行回数Acrossで蓄積され、0から始まります。
ループ内でrunning SUMを構築するには、蓄積器を...に初期化する必要があります
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
和は0から始めます;積は1から始める必要があります。
running PRODUCTを構築するには、蓄積器を...に初期化する必要があります
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
0から积を始めると常に0になるため、1から始めます。
ループ中に偶数を数えるには、...を使用します
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
if文はループが数える対象の項目を選択します。
ループ内に蓄積器の初期化を入れると、各実行回数でリセットされます。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
ループ内ではなく、ループの前に初期化してください。
ターゲットが見つかったらループを即座に停止したい場合、...を使用できます
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
break は最も内側のループから脱出する。布尔 flag をループ条件や制御論理にも使用し、単に代入するだけでは実行を停止しない。
フラグやbreakによる早期終了
- 必要なものを見つけたら、早急に停止できる場合があります。
booleanフラグで「見つけた」ことを記録し、ループ条件でチェックできます。フラグに割り当てるだけではループは終了しません。breakは内側のループを直ちに終了します。 - 「リストにゼロが含まれているか?」 — 最初のゼロで見つかり次第停止します。早期退出は作業を節約しますが、「見つからない」ケースに対する論理も正しく保つ必要があります。
蓄積子を正しく初期化しないと、すべての結果が誤りになります。 合計は 0 で始め、積は 1 で始めます(積を 0 で始めると常に 0 になってしまいます)。最大値は非空チェック後の最初の要素から始めます。空のコレクションには最大値がありませんが、契約で別途定義されている場合を除きます。また、条件に一致するすべての反復で更新してください。ループ内に不適切な初期化を行うと、各パスでリセットされてしまい、合計が台無しになります。
What is the maximum of the nonempty array {−8, −3, −11}?
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
−3 is the greatest actual element. Starting at 0 produces an invalid invented candidate.
a[0] を読み込むことは、空の配列に対する最大値の初期化として有効な方法である。
難易度 1/5 · 100 コイン + 今日初回完了時に小ボーナス付与
空の配列には最初の要素が存在しない。入力を確認するか、別個の「最大値なし」の結果を定義せよ。
int 配列 {-8, -3, -11} には偶数がいくつあるか。
難易度 2/5 · 140 コイン + 今日初回完了時に小ボーナス付与
-8 は 2 で割った余りがゼロになる唯一の値ですが、負の値も偶数である可能性があります。
配列 a のループにおける偶数のカウント:
int count = 0;for (int i = 0; i < a.length; i++) { if (a[i] % 2 == 0) count++; }- ループは各要素を訪問し、
ifは偶数のみをカウントします。
の推論を新しいケースへ適用せよ
- 空の配列には最初の要素がなく、別の契約やチェックが必要です。
- 初期値は操作に適している必要があります:合計はゼロ、積は1、最大値は有効な開始候補。
一般的なループパターンは反復と選択を組み合わせたものである:アキュムレータ(sum += x、カウント、または進行中の最大値)はパスにわたって構築され、一致するアイテムのみを処理するために内部にifが含まれる。アキュムレータを初期化する際、和は0、積は1、最大値は最初の値とする。答えが見つかったら早期終了(break/フラグ)を検討する。