Namaran

Code daily. Without assist.

2026-09-14

find_pair.rs

fn find_pair(v: &[i32], target: i32) -> Option<(usize, usize)> {
    // write this: indices (i, j), i < j, of the first pair with
    // v[i] + v[j] == target — using two for loops and no return
}

和がtargetになる最初のペアの添字を返すfind_pairを、forの2重ループで書いてください。ただしreturnは使わないこと。

Reference
fn find_pair(v: &[i32], target: i32) -> Option<(usize, usize)> {
    'found: {
        for i in 0..v.len() {
            for j in i + 1..v.len() {
                if v[i] + v[j] == target {
                    break 'found Some((i, j));
                }
            }
        }
        None
    }
}

値付きのbreakが書けるのはloopだけで、forwhileからは値を持って抜けられません。そこでラベル付きブロック'found: { ... }を使います。break 'found 値はネストしたループをまとめて飛び越え、ブロック全体をその値にします。最後まで見つからなければ、ブロック末尾のNoneが値になります。これは参考実装であり、唯一の正解ではありません。