Boucles imbriquées
Fait partie de la section Fundamentals du Journey Rust de Coddy — leçon 41 sur 75.
Une boucle imbriquée est simplement une boucle à l'intérieur d'une autre boucle. La boucle interne effectuera toutes ses itérations pour chaque itération de la boucle externe. Une bonne analogie pour cela est une horloge : pour chaque heure (boucle externe), l'aiguille des minutes (boucle interne) doit effectuer son cycle complet de 60 minutes.
Exemple d'une boucle imbriquée :
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Cela affichera :
// 0 0
// 0 1
// 1 0
// 1 1La boucle externe (x) s'exécute deux fois, et pour chacune de ces fois, la boucle interne (y) s'exécute deux fois.
Défi
DébutantÉcrivez un programme qui trouve tous les triplets de nombres dont la somme est égale à n en utilisant des nombres de 1 à n - 1. Le programme doit afficher toutes les combinaisons possibles où le premier nombre est inférieur ou égal au deuxième nombre, et le deuxième nombre est inférieur ou égal au troisième nombre (c'est-à-dire, dans un ordre non décroissant). Cela garantit que nous n'avons pas de triplets en double comme "1 2 7" et "2 1 7" qui représentent le même ensemble de nombres.
Par exemple, si n = 10, la sortie doit être :
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4Parce que :
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 = 10Ordre d'affichage : Les triplets doivent être affichés par ordre croissant. Le premier nombre doit itérer du plus petit au plus grand, et pour chaque premier nombre, le deuxième nombre doit itérer du premier nombre jusqu'à la valeur maximale valide, en garantissant a ≤ b ≤ c.
Aide-mémoire
Une boucle imbriquée est une boucle à l'intérieur d'une autre boucle. La boucle interne effectue toutes ses itérations pour chaque itération de la boucle externe.
Structure de base d'une boucle imbriquée :
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Sortie :
// 0 0
// 0 1
// 1 0
// 1 1La boucle externe s'exécute complètement et, pour chaque itération de la boucle externe, la boucle interne effectue son cycle complet.
Essayez vous-même
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// Écrivez votre code ci-dessous
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Fundamentals
4Opérateurs - Partie 1
Opérateurs arithmétiquesOpérateur moduloRaccourcis arithmétiquesOpérateurs de comparaisonComparaison de chaînes7Entrées/Sorties de base
Afficher dans la consoleLire la saisie utilisateurRécapitulatif - Jusqu'à 120Récapitulatif - Vrai ou Faux5Opérateurs, partie 2
Opérateurs logiques, partie 1Opérateurs logiques, partie 2Récapitulatif - Logique simpleOpérateurs logiques, partie 33Variables - Partie 2
Déclaration de typeConventions de nommageInférence de typeRécapitulatif - Initialiser des variablesConversion de type9Boucles
Boucle For sur une sérieBoucle WhileBreakContinueBoucles imbriquéesÉtiquettes de boucleBoucle infinieRécapitulatif - Entrée dynamique12Bases des tableaux
Déclaration de tableauxTableau comme paramètreAccès aux élémentsModification de tableauxRécapitulatif - Affichage formaté d'un tableau15Opérations sur les chaînes
Méthodes de chaînesMacro format!Conversion de chaînesRécapitulatif - Format