Pętle zagnieżdżone
Część sekcji Podstawy ścieżki Rust w Coddy. Lekcja 41 z 75.
Pętla zagnieżdżona to po prostu pętla wewnątrz innej pętli. Pętla wewnętrzna wykona wszystkie swoje iteracje podczas każdej pojedynczej iteracji pętli zewnętrznej. Dobrym przykładem jest zegar: dla każdej godziny (pętla zewnętrzna) wskazówka minutowa (pętla wewnętrzna) musi wykonać pełny 60-minutowy cykl.
Przykład zagnieżdżonej pętli:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// To wypisze:
// 0 0
// 0 1
// 1 0
// 1 1Pętla zewnętrzna (x) wykonuje się dwa razy, a przy każdym z tych wykonań pętla wewnętrzna (y) wykonuje się dwa razy.
Wyzwanie
PoczątkującyNapisz program, który znajduje wszystkie trójki liczb sumujące się do n, używając liczb od 1 do n - 1. Program powinien wyświetlić wszystkie możliwe kombinacje, w których pierwsza liczba jest mniejsza lub równa drugiej, a druga jest mniejsza lub równa trzeciej (czyli w kolejności nierosnącej). Dzięki temu unikniemy zduplikowanych trójek, takich jak "1 2 7" i "2 1 7", które reprezentują ten sam zestaw liczb.
Na przykład, jeśli n = 10, wynik powinien wyglądać tak:
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4Ponieważ:
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 = 10Kolejność wyświetlania: Trójki powinny być wyświetlane w kolejności rosnącej. Pierwsza liczba powinna przyjmować wartości od najmniejszej do największej, a dla każdej pierwszej liczby druga liczba powinna przyjmować wartości od pierwszej liczby do maksymalnej prawidłowej wartości, zapewniając a ≤ b ≤ c.
Spróbuj swoich sił
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// Napisz swój kod poniżej
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 1
Operatory arytmetyczneOperator moduloSkrócone operacje arytmetyczneOperatory porównaniaPorównywanie ciągów znaków7Podstawowe wejście i wyjście
Wyświetlanie w konsoliOdczytywanie danych od użytkownikaPowtórka – do 120Powtórka – prawda czy fałsz5Operatory, część 2
Operatory logiczne, część 1Operatory logiczne, część 2Powtórka — prosta logikaOperatory logiczne, część 311Funkcje
Deklarowanie funkcjiParametry i argumentyWartości zwracaneWiele wartości zwracanychPowtórka – funkcja SigmaPowtórka – funkcja walidująca14Iterowanie po tablicach
Przewodnik po zakresachUlepszona pętla forPożyczanie w pętliTypowe operacje na tablicach3Zmienne – część 2
Deklarowanie typuKonwencje nazewnictwaWnioskowanie o typiePodsumowanie – inicjalizacja zmiennychRzutowanie typów9Pętle
Pętla for dla sekwencjiPętla whileInstrukcja breakInstrukcja continuePętle zagnieżdżoneEtykiety pętliPętla nieskończonaPodsumowanie — dynamiczne dane wejściowe12Podstawy tablic
Deklarowanie tablicTablica jako parametrDostęp do elementówModyfikowanie tablicPodsumowanie — czytelny wydruk tablicy15Operacje na ciągach znaków
Metody ciągów znakówMakro format!Konwersja ciągów znakówPowtórka — formatowaniePoćwicz samodzielnie: Kompilator Rust online