ネストしたループ
CoddyのRustジャーニー「Fundamentals」セクションの一部 — レッスン 41/75。
入れ子になったループ(ネストされたループ)とは、単にループの中にある別のループのことです。外側のループが1回繰り返されるごとに、内側のループはそのすべての反復を完了します。これを例えるなら時計が良いでしょう。1時間(外側のループ)ごとに、長針(内側のループ)は60分のサイクルを完全に一周しなければなりません。
ネストされたループの例:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// 次のように出力されます:
// 0 0
// 0 1
// 1 0
// 1 1外側のループ (x) は2回実行され、その各回に対して、内側のループ (y) が2回実行されます。
チャレンジ
初心者1 から n - 1 までの数字を使用して、合計が n になるすべての3つの数字の組み合わせ(トリプレット)を見つけるプログラムを作成してください。プログラムは、最初の数字が2番目の数字以下であり、2番目の数字が3番目の数字以下である(つまり、非減少順である)すべての可能な組み合わせを表示する必要があります。これにより、同じ数字のセットを表す "1 2 7" と "2 1 7" のような重複したトリプレットが含まれないようになります。
例えば、n = 10 の場合、出力は以下のようになります:
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4理由は以下の通りです:
1 + 1 + 8 = 10
1 + 2 + 7 = 10
1 + 3 + 6 = 10
1 + 4 + 5 = 10
2 + 2 + 6 = 10
2 + 3 + 5 = 10
2 + 4 + 4 = 10
3 + 3 + 4 = 10出力順序: トリプレットは昇順で出力する必要があります。最初の数字を最小から最大へと繰り返し、それぞれの最初の数字に対して、2番目の数字を最初の数字から有効な最大値まで繰り返すことで、a ≤ b ≤ c を保証してください。
チートシート
二重ループ(入れ子のループ)とは、あるループの中にある別のループのことです。外側のループが1回繰り返されるごとに、内側のループはそのすべての反復を完了します。
基本的な二重ループの構造:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// 出力:
// 0 0
// 0 1
// 1 0
// 1 1外側のループが実行され、外側のループの各反復に対して、内側のループはその全サイクルを実行します。
自分で試してみよう
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// 以下にコードを記述してください
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。