Menu
Coddy logo textTech

Метки циклов

Часть раздела Fundamentals путешествия по Rust на Coddy — урок 42 из 75.

Метки в Rust помогают прерывать или продолжать выполнение конкретных циклов, когда они являются вложенными. Добавьте 'label: перед циклом, чтобы пометить его.

Например:

'outer: for i in 1..=3 {
    'inner: for j in 1..=3 {
        if i * j > 5 {
            break 'outer;
            // Это прервет внешний цикл
        }
        println!("({}, {})", i, j);
    }
}

В этом примере у нас есть два вложенных цикла с метками 'outer и 'inner. Когда произведение i и j становится больше 5, выполняется инструкция break 'outer;, которая завершает внешний цикл. Результат выполнения этого кода будет следующим:

(1, 1)
(1, 2)
(1, 3)
(2, 1)
(2, 2)

Аналогично, вы можете использовать continue 'label;, чтобы перейти к следующей итерации указанного цикла. Например:

'outer: for i in 1..=3 {
    'inner: for j in 1..=3 {
        if i == j {
            continue 'outer;
            // Это продолжит внешний цикл
        }
        println!("({}, {})", i, j);
    }
}

В этом случае, когда i равно j, выполняется оператор continue 'outer;, который пропускает оставшуюся часть внутреннего цикла и переходит к следующей итерации внешнего цикла. Результат будет следующим:

(2, 1)
(3, 1)
(3, 2)
challenge icon

Задание

Новичок

Напишите программу на Rust, которая использует именованные циклы (labeled loops), чтобы найти первую пару чисел (i, j), такую, что их сумма больше 10, а их произведение кратно 12 (произведение делится на 12 без остатка).  Программа должна перебирать i от 1 до 20 и j от 1 до 20.

Когда вы найдете такую пару, выведите ее в формате (i, j) и выйдите из внешнего цикла.

Шпаргалка

Метки в Rust помогают прерывать или продолжать выполнение определенных циклов, когда они вложены. Добавьте 'label: перед циклом, чтобы пометить его.

Используйте break 'label; для выхода из конкретного помеченного цикла:

'outer: for i in 1..=3 {
    'inner: for j in 1..=3 {
        if i * j > 5 {
            break 'outer;  // Прерывает внешний цикл
        }
        println!("({}, {})", i, j);
    }
}

Используйте continue 'label; для перехода к следующей итерации конкретного помеченного цикла:

'outer: for i in 1..=3 {
    'inner: for j in 1..=3 {
        if i == j {
            continue 'outer;  // Продолжает внешний цикл
        }
        println!("({}, {})", i, j);
    }
}

Попробуйте сами

fn main() {
    'outer: for i in 1..=20 {
        for j in 1..=20 {
            // Your logic here
            
            
            break 'outer;
        }
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Fundamentals