Вложенные циклы
Часть раздела 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) выполняется дважды.
Задание
НовичокНапишите программу, которая находит все тройки чисел, сумма которых равна 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();
// Напишите свой код ниже
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Fundamentals
4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияАрифметические сокращенияОператоры сравненияСравнение строк7Основы ввода-вывода
Вывод в консольЧтение ввода пользователяПовторение — До 120Повторение — True или False5Операторы. Часть 2
Логические операторы. Часть 1Логические операторы. Часть 2Повторение — простая логикаЛогические операторы. Часть 38Приложение-калькулятор
Приветственное сообщениеПолучение чисел3Переменные. Часть 2
Объявление типаСоглашения об именованииВывод типовПовторение: инициализация переменныхПриведение типов9Циклы
Цикл For по последовательностиЦикл WhileОператор BreakОператор ContinueВложенные циклыМетки цикловБесконечный циклПовторение — Динамический ввод