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