Bucle anidado
Parte de la sección Fundamentals del Journey de Rust de Coddy — lección 41 de 75.
Un bucle anidado es simplemente un bucle dentro de otro bucle. El bucle interno completará todas sus iteraciones por cada iteración individual del bucle externo. Una buena analogía para esto es un reloj: por cada hora (bucle externo), el minutero (bucle interno) debe completar su ciclo completo de 60 minutos.
Ejemplo de un bucle anidado:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Esto producirá:
// 0 0
// 0 1
// 1 0
// 1 1El bucle externo (x) se ejecuta dos veces, y por cada una de esas veces, el bucle interno (y) se ejecuta dos veces.
Desafío
PrincipianteEscribe un programa que encuentre todas las ternas de números que sumen n utilizando números del 1 al n - 1. El programa debe mostrar todas las combinaciones posibles donde el primer número sea menor o igual que el segundo número, y el segundo número sea menor o igual que el tercer número (es decir, en orden no decreciente). Esto asegura que no tengamos ternas duplicadas como "1 2 7" y "2 1 7", que representan el mismo conjunto de números.
Por ejemplo, si n = 10, la salida debería ser:
1 1 8
1 2 7
1 3 6
1 4 5
2 2 6
2 3 5
2 4 4
3 3 4Porque:
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 = 10Orden de impresión: Las ternas deben imprimirse en orden ascendente. El primer número debe iterar de menor a mayor, y para cada primer número, el segundo número debe iterar desde el primer número hasta el valor máximo válido, asegurando que a ≤ b ≤ c.
Hoja de referencia
Un bucle anidado es un bucle dentro de otro bucle. El bucle interno completa todas sus iteraciones por cada iteración individual del bucle externo.
Estructura básica de un bucle anidado:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Salida:
// 0 0
// 0 1
// 1 0
// 1 1El bucle externo se ejecuta completamente y, por cada iteración del bucle externo, el bucle interno ejecuta su ciclo completo.
Pruébalo tú mismo
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// Escribe tu código a continuación
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentals
4Operadores Parte 1
Operadores aritméticosOperador de móduloAtajos aritméticosOperadores de comparaciónComparación de strings5Operadores Parte 2
Operadores lógicos Parte 1Operadores lógicos Parte 2Repaso - Lógica simpleOperadores lógicos Parte 33Variables Parte 2
Declaración de tiposConvenciones de nomenclaturaInferencia de tiposResumen - Inicializar variablesConversión de tipos9Bucles
For sobre seriesBucle WhileBreakContinueBucle anidadoEtiquetas de bucleBucle infinitoResumen - Entrada dinámica