Menu
Coddy logo textTech

Вложенные циклы

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

Вложенный цикл — это просто цикл внутри другого цикла. Внутренний цикл выполнит все свои итерации для каждой отдельной итерации внешнего цикла. Хорошей аналогией для этого являются часы: для каждого часа (внешний цикл) минутная стрелка (внутренний цикл) должна пройти свой полный 60-минутный цикл.

Пример вложенного цикла:

for x in 0..2 {
    for y in 0..2 {
        println!("{} {}", x, y);
    }
}
// Это выведет:
// 0 0
// 0 1
// 1 0
// 1 1

Внешний цикл (x) выполняется дважды, и при каждом его выполнении внутренний цикл (y) выполняется дважды.

challenge icon

Задание

Новичок

Напишите программу, которая находит все тройки чисел, сумма которых равна n, используя числа от 1 до n - 1. Программа должна выводить все возможные комбинации, где первое число меньше или равно второму числу, а второе число меньше или равно третьему числу (т.е. в неубывающем порядке). Это гарантирует отсутствие дубликатов троек, таких как "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

Порядок вывода: Тройки должны выводиться в порядке возрастания. Первое число должно меняться от наименьшего к наибольшему, и для каждого первого числа второе число должно меняться от значения первого числа до максимально возможного, обеспечивая условие a ≤ b ≤ c.

Шпаргалка

Вложенный цикл — это цикл внутри другого цикла. Внутренний цикл выполняет все свои итерации для каждой отдельной итерации внешнего цикла.

Базовая структура вложенного цикла:

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