Ciclo annidato
Fa parte della sezione Fondamenti del percorso Rust di Coddy. Lezione 41 di 75.
Un ciclo annidato è semplicemente un ciclo all’interno di un altro ciclo. Il ciclo interno completerà tutte le sue iterazioni per ogni singola iterazione del ciclo esterno. Una buona analogia è un orologio: per ogni ora (ciclo esterno), la lancetta dei minuti (ciclo interno) deve completare il suo intero ciclo di 60 minuti.
Esempio di ciclo annidato:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Verrà stampato:
// 0 0
// 0 1
// 1 0
// 1 1Il ciclo esterno (x) viene eseguito due volte e, per ciascuna di queste volte, il ciclo interno (y) viene eseguito due volte.
Sfida
PrincipianteScrivi un programma che trovi tutte le terne di numeri la cui somma è n, usando numeri da 1 a n - 1. Il programma deve mostrare tutte le combinazioni possibili in cui il primo numero è minore o uguale al secondo e il secondo è minore o uguale al terzo (cioè in ordine non decrescente). Questo garantisce che non ci siano terne duplicate come "1 2 7" e "2 1 7", che rappresentano lo stesso insieme di numeri.
Ad esempio, se n = 10, l'output dovrebbe essere:
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4Perché:
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 = 10Ordine di stampa: Le terne devono essere stampate in ordine crescente. Il primo numero deve scorrere dal più piccolo al più grande e, per ogni primo numero, il secondo numero deve scorrere dal primo numero al valore massimo valido, assicurando a ≤ b ≤ c.
Provalo tu
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// Scrivi il tuo codice qui sotto
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
4Operatori Parte 1
Operatori aritmeticiOperatore moduloAbbreviazioni aritmeticheOperatori di confrontoConfronto tra stringhe7Input/output di base
Stampare sulla consoleLeggere l'input dell'utenteRiepilogo - Fino a 120Riepilogo - Vero o falso5Operatori Parte 2
Operatori logici Parte 1Operatori logici Parte 2Ripasso - Logica sempliceOperatori logici Parte 311Funzioni
Dichiarare le funzioniParametri e argomentiValori restituitiValori restituiti multipliRiepilogo - funzione SigmaRiepilogo - funzione di validazione14Iterare sugli array
Guida ai rangeCiclo for avanzatoPrestito nel cicloOperazioni comuni sugli array3Variabili Parte 2
Dichiarazione del tipoConvenzioni di denominazioneInferenza del tipoRipasso - Inizializzare le variabiliConversione di tipo9Cicli
Ciclo for su sequenzeCiclo whileBreakContinueCiclo annidatoEtichette dei cicliCiclo infinitoRiepilogo - Input dinamico12Fondamenti degli array
Dichiarare gli arrayArray come parametroAccedere agli elementiModificare gli arrayRiepilogo - Stampare un array in modo leggibile15Operazioni sulle stringhe
Metodi delle stringheMacro format!Conversione delle stringheRipasso - FormattazioneEsercitati da solo: Compilatore Rust online