Laços Aninhados
Parte da seção Fundamentals do Journey de Rust da Coddy — lição 41 de 75.
Um loop aninhado é simplesmente um loop dentro de outro loop. O loop interno completará todas as suas iterações para cada iteração única do loop externo. Uma boa analogia para isso é um relógio: para cada hora (loop externo), o ponteiro dos minutos (loop interno) deve completar seu ciclo completo de 60 minutos.
Exemplo de um loop aninhado:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Isso resultará em:
// 0 0
// 0 1
// 1 0
// 1 1O loop externo (x) executa duas vezes e, para cada uma dessas vezes, o loop interno (y) executa duas vezes.
Desafio
InicianteEscreva um programa que encontre todos os trios de números que somam n usando números de 1 a n - 1. O programa deve mostrar todas as combinações possíveis onde o primeiro número é menor ou igual ao segundo número, e o segundo número é menor ou igual ao terceiro número (ou seja, em ordem não decrescente). Isso garante que não tenhamos trios duplicados como "1 2 7" e "2 1 7", que representam o mesmo conjunto de números.
Por exemplo, se n = 10, a saída deve 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 = 10Ordem de impressão: Os trios devem ser impressos em ordem crescente. O primeiro número deve iterar do menor para o maior e, para cada primeiro número, o segundo número deve iterar do primeiro número até o valor máximo válido, garantindo que a ≤ b ≤ c.
Folha de consulta
Um loop aninhado é um loop dentro de outro loop. O loop interno completa todas as suas iterações para cada iteração única do loop externo.
Estrutura básica de loop aninhado:
for x in 0..2 {
for y in 0..2 {
println!("{} {}", x, y);
}
}
// Saída:
// 0 0
// 0 1
// 1 0
// 1 1O loop externo é executado completamente e, para cada iteração do loop externo, o loop interno executa seu ciclo completo.
Experimente você mesmo
use std::io;
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let n: i32 = input.trim().parse().unwrap();
// Escreva seu código abaixo
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentals
4Operadores Parte 1
Operadores AritméticosOperador de MóduloAtalhos AritméticosOperadores de ComparaçãoComparação de Strings7Entrada e Saída Básica
Exibindo no ConsoleLendo a Entrada do UsuárioRevisão - Até 120Revisão - Verdadeiro ou Falso5Operadores Parte 2
Operadores Lógicos Parte 1Operadores Lógicos Parte 2Recapitulação - Lógica SimplesOperadores Lógicos Parte 33Variáveis Parte 2
Declaração de TipoConvenções de NomenclaturaInferência de TipoRecapitulação - Inicializar VariáveisConversão de Tipo9Laços
For sobre SériesLaço WhileBreakContinueLaços AninhadosRótulos de LoopLoop InfinitoRecapitulação - Entrada Dinâmica