Menu
Coddy logo textTech

ネストしたループ

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回実行されます。

challenge icon

チャレンジ

初心者

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();
    // 以下にコードを記述してください

}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

Fundamentalsのすべてのレッスン