Menu
Coddy logo textTech

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 1

O loop externo (x) executa duas vezes e, para cada uma dessas vezes, o loop interno (y) executa duas vezes.

challenge icon

Desafio

Iniciante

Escreva 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 4

Porque:

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 = 10

Ordem 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 1

O 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

}
quiz iconTeste seus conhecimentos

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