LP2

LP2

LP2

profile-pic

Lista de Exercícios — Arrays em C#

Esta lista introduz o conceito de array: uma estrutura que armazena vários valores do mesmo tipo em posições numeradas. Os exercícios estão organizados em pares — o primeiro de cada par apresenta um conceito novo de forma direta; o segundo aplica esse mesmo conceito em um problema mais elaborado.

Selecione um exercício no menu lateral ou abaixo para começar.

Exercício 01 — Radiação em Chernobyl

array indexação Length

Após o acidente de Chernobyl, ocorrido em 26 de abril de 1986, equipes passaram a registrar diariamente indicadores de radiação para acompanhar a evolução da contaminação ao longo dos primeiros dias. Em 2026, o acidente completa 40 anos.

Declare um array de inteiros com os indicadores de radiação dos 10 primeiros dias após o acidente, em microroentgens por hora (uR/h): 320, 280, 250, 210, 190, 170, 150, 140, 130, 120.

int[] radiacao = { 320, 280, 250, 210, 190, 170, 150, 140, 130, 120 };

a) Exiba no console:

  • O indicador de radiação do primeiro dia.
  • O indicador de radiação do terceiro dia.
  • O indicador de radiação do último dia — use a propriedade Length para calcular o índice, sem escrever o número 9 diretamente no código.
Saída esperada — letra a

Primeiro dia: 320 uR/h
Terceiro dia: 250 uR/h
Último dia: 120 uR/h

Ajuda — letra a

O primeiro elemento está no índice 0 e o terceiro está no índice 2. Para o último, use radiacao.Length - 1.

Console.WriteLine($"Primeiro dia: {radiacao[0]} uR/h");
Console.WriteLine($"Terceiro dia: {radiacao[2]} uR/h");
Console.WriteLine($"Último dia: {radiacao[radiacao.Length - 1]} uR/h");

b) Exiba a radiação registrada em todos os dias.

Saída esperada — letra b

Dia 1: 320 uR/h
Dia 2: 280 uR/h
Dia 3: 250 uR/h
Dia 4: 210 uR/h
Dia 5: 190 uR/h
Dia 6: 170 uR/h
Dia 7: 150 uR/h
Dia 8: 140 uR/h
Dia 9: 130 uR/h
Dia 10: 120 uR/h

Ajuda — letra b

Use um for crescente começando em 0 e indo enquanto i < radiacao.Length. Para mostrar o número do dia, use i + 1.

for (int i = 0; i < radiacao.Length; i++)
{
    Console.WriteLine($"Dia {i + 1}: {radiacao[i]} uR/h");
}

c) Exiba as radiações de trás para frente, começando pelo último dia e terminando no primeiro.

Saída esperada — letra c

Dia 10: 120 uR/h
Dia 9: 130 uR/h
Dia 8: 140 uR/h
Dia 7: 150 uR/h
Dia 6: 170 uR/h
Dia 5: 190 uR/h
Dia 4: 210 uR/h
Dia 3: 250 uR/h
Dia 2: 280 uR/h
Dia 1: 320 uR/h

Ajuda — letra c

Use um for decrescente. Ele começa em radiacao.Length - 1, continua enquanto i >= 0 e diminui com i--.

Índice 0 1 2 3 4 5 6 7 8 9 10
Valor 320 280 250 210 190 170 150 140 130 120 não existe

Este vetor tem radiacao.Length == 10, mas seus índices vão de 0 até 9. Por isso o último elemento é radiacao[radiacao.Length - 1], isto é, radiacao[9]. A posição radiacao[10] não existe.

for (int i = radiacao.Length - 1; i >= 0; i--)
{
    Console.WriteLine($"Dia {i + 1}: {radiacao[i]} uR/h");
}

Exercício 02 — Média de consumo

array for acumulador

A Organização das Nações Unidas reconhece que uma pessoa precisa de aproximadamente 50 a 100 litros de água por dia para usos pessoais e domésticos básicos, como beber, cozinhar e manter a higiene.

Um laboratório quer acompanhar o consumo diário de água de um equipamento ao longo de 5 dias.

Leia do usuário 5 valores reais representando o consumo em litros de cada dia e armazene-os em um array de double. Em seguida, percorra o array com um for para calcular a soma dos valores e exiba a média ao final.

Exemplo de Entrada e Saída

Entrada:
Dia 1: 12.5
Dia 2: 10.0
Dia 3: 11.5
Dia 4: 13.0
Dia 5: 9.0

Saída:
Média: 11.2 litros

Dica 1 — Raciocínio

Use dois for: o primeiro para preencher o array lendo cada valor informado pelo usuário; o segundo para percorrer o array acumulando a soma. A média é a soma dividida por consumo.Length.

Tanto a soma quanto a média devem ser double para preservar as casas decimais.

Dica 2 — Estrutura
declarar array consumo[5]

para i de 0 até 4
    ler consumo[i]

soma = 0
para i de 0 até 4
    soma = soma + consumo[i]

media = soma / consumo.Length
exibir "Média: " + media
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura dos consumos
double[] consumo = new double[5];

for (int i = 0; i < consumo.Length; i++)
{
    Console.Write("Dia " + (i + 1) + ": ");
    consumo[i] = Convert.ToDouble(Console.ReadLine());
}
Passo 2 — Cálculo e exibição da média
double soma = 0;
for (int i = 0; i < consumo.Length; i++)
{
    soma += consumo[i];
}

double media = soma / consumo.Length;
Console.WriteLine("Média: " + media + " litros");

Exercício 03 — Maior nota de redação

array for comparação progressiva

Uma equipe está analisando as últimas 6 notas de redação do ENEM corrigidas em um grupo de candidatos.

Leia 6 números inteiros representando essas notas e armazene-os em um array. Em seguida, percorra o array para encontrar e exibir a maior nota de redação.

Inicialize a variável maior com o primeiro elemento do array antes de entrar no laço.

Exemplo de Entrada e Saída

Entrada:
Nota 1: 760
Nota 2: 840
Nota 3: 920
Nota 4: 680
Nota 5: 880
Nota 6: 960

Saída:
Maior nota da redação: 960

Dica 1 — Raciocínio

Inicialize maior = notas[0]. Percorra o array a partir do índice 1 (o índice 0 já foi usado como valor inicial). Para cada elemento, se ele for maior do que maior, atualize maior. Ao término do laço, maior conterá o maior valor do array.

Dica 2 — Estrutura
ler notas[0..5]

maior = notas[0]
para i de 1 até 5
    se notas[i] > maior
        maior = notas[i]

exibir "Maior nota da redação: " + maior
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura das notas
int[] notas = new int[6];

for (int i = 0; i < notas.Length; i++)
{
    Console.Write("Nota " + (i + 1) + ": ");
    notas[i] = Convert.ToInt32(Console.ReadLine());
}
Passo 2 — Encontrar o maior
int maior = notas[0];
for (int i = 1; i < notas.Length; i++)
{
    if (notas[i] > maior)
    {
        maior = notas[i];
    }
}

Console.WriteLine("Maior nota da redação: " + maior);

Exercício 04 — Time campeão

array índice do maior arrays paralelos

Considere os vetores:

string[] nomes = { "Flamengo", "Palmeiras", "Atlético-MG", "Grêmio" };
int[] pontos = { 71, 68, 75, 60 };

Cada posição representa um time e sua pontuação no campeonato. Ao final, exiba o nome e a pontuação do time em primeiro lugar.

Em vez de guardar apenas o maior valor, guarde o índice da posição onde ele se encontra — assim você pode recuperar tanto a pontuação quanto o nome correspondente.

Exemplo de Entrada e Saída

Vetores:
Flamengo / 71   Palmeiras / 68   Atlético-MG / 75   Grêmio / 60

Saída:
Campeão: Atlético-MG com 75 pontos

Dica 1 — Raciocínio

Este problema é muito parecido com o exercício anterior: você também precisa percorrer os valores para descobrir qual é o maior. A diferença é que agora não basta guardar apenas a pontuação; é necessário ter dois vetores para relacionar o nome do time com seus pontos.

Use dois arrays com o mesmo tamanho: string[] nomes e int[] pontos. O elemento de índice i em cada array corresponde ao mesmo time.

Para encontrar o campeão, não guarde o maior valor — guarde o índice do maior (indMaior). Comece com indMaior = 0 e atualize sempre que encontrar uma pontuação maior do que pontos[indMaior].

Dica 2 — Estrutura
indMaior = 0
para i de 1 até 3
    se pontos[i] > pontos[indMaior]
        indMaior = i

exibir "Campeão: " + nomes[indMaior] + " com " + pontos[indMaior] + " pontos"
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Declarar os vetores
string[] nomes = { "Flamengo", "Palmeiras", "Atlético-MG", "Grêmio" };
int[] pontos = { 71, 68, 75, 60 };
Passo 2 — Encontrar o índice do campeão
int indMaior = 0;
for (int i = 1; i < pontos.Length; i++)
{
    if (pontos[i] > pontos[indMaior])
    {
        indMaior = i;
    }
}

Console.WriteLine("Campeão: " + nomes[indMaior] + " com " + pontos[indMaior] + " pontos");

Exercício 05 — Pares e ímpares

array for % contador

Considere o array de inteiros:

int[] numeros = { 12, 7, 4, 9, 10, 13, 8, 5 };

Percorra o array contando quantos elementos são pares e quantos são ímpares. Exiba as duas contagens.

Exemplo de Entrada e Saída

Array: 12, 7, 4, 9, 10, 13, 8, 5

Saída:
Pares: 4
Ímpares: 4

Dica 1 — Raciocínio

O operador % (resto da divisão) permite verificar a paridade: se n % 2 == 0, o número é par; caso contrário, é ímpar. Declare dois contadores iniciados em zero e incremente o correto a cada iteração do laço.

Dica 2 — Estrutura
declarar array numeros com 8 valores

pares = 0
impares = 0
para i de 0 até 7
    se numeros[i] % 2 == 0
        pares++
    senão
        impares++

exibir "Pares: " + pares
exibir "Ímpares: " + impares
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Declarar o array
int[] numeros = { 12, 7, 4, 9, 10, 13, 8, 5 };
Passo 2 — Contar pares e ímpares
int pares = 0, impares = 0;

for (int i = 0; i < numeros.Length; i++)
{
    if (numeros[i] % 2 == 0)
        pares++;
    else
        impares++;
}

Console.WriteLine("Pares: "   + pares);
Console.WriteLine("Ímpares: " + impares);

Exercício 06 — Palíndromo numérico

array índice simétrico bool

Leia uma sequência de 6 números inteiros e verifique se ela forma um palíndromo — ou seja, se a sequência lida da esquerda para a direita é idêntica à lida da direita para a esquerda.

Use apenas um laço que percorre a primeira metade do array, comparando cada elemento v[i] com seu simétrico v[v.Length - 1 - i].

Exemplo de Entrada e Saída — Palíndromo

Entrada: 1 2 3 3 2 1  →  Saída: É palíndromo.

Exemplo de Entrada e Saída — Não palíndromo

Entrada: 1 2 3 4 5 6  →  Saída: Não é palíndromo.

Dica 1 — Raciocínio

Comece assumindo que é um palíndromo (bool palindromo = true). Percorra apenas os índices de 0 até v.Length / 2 - 1 (a primeira metade). Para cada posição i, compare v[i] com v[v.Length - 1 - i]. Se alguma comparação falhar, defina palindromo = false e interrompa o laço com break.

Dica 2 — Estrutura
ler v[0..5]

palindromo = verdadeiro
para i de 0 até (v.Length / 2 - 1)
    se v[i] != v[v.Length - 1 - i]
        palindromo = falso
        parar

se palindromo
    exibir "É palíndromo."
senão
    exibir "Não é palíndromo."
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura da sequência
int[] v = new int[6];

for (int i = 0; i < v.Length; i++)
{
    Console.Write("Número " + (i + 1) + ": ");
    v[i] = Convert.ToInt32(Console.ReadLine());
}
Passo 2 — Verificar o palíndromo
bool palindromo = true;
for (int i = 0; i < v.Length / 2; i++)
{
    if (v[i] != v[v.Length - 1 - i])
    {
        palindromo = false;
        break;
    }
}

if (palindromo)
    Console.WriteLine("É palíndromo.");
else
    Console.WriteLine("Não é palíndromo.");

Exercício 07 — Histograma de notas

array array como contador faixas

Leia 10 notas inteiras de 0 a 10. Use um array de 4 posições para contar quantas notas caem em cada faixa de desempenho:

  • contagem[0] — faixa 0–4 (Insuficiente)
  • contagem[1] — faixa 5–6 (Regular)
  • contagem[2] — faixa 7–8 (Bom)
  • contagem[3] — faixa 9–10 (Ótimo)
int[] contagem = { 0, 0, 0, 0 };

A cada nota lida, basta somar 1 na posição correta desse vetor. Não é necessário criar um segundo array. Ao final, exiba a quantidade de notas em cada faixa com o rótulo correspondente.

Exemplo de Entrada e Saída

Entrada: 10, 3, 7, 5, 8, 2, 9, 6, 7, 10

Saída:
Insuficiente (0–4): 2
Regular (5–6): 2
Bom (7–8): 3
Ótimo (9–10): 3

Dica 1 — Raciocínio

Um array pode funcionar como uma série de contadores. Declare int[] contagem = { 0, 0, 0, 0 }. Para cada nota lida, use um if/else if para decidir qual posição incrementar.

Verifique a faixa mais alta primeiro (>= 9) e desça até a mais baixa, ou use faixas bem delimitadas com &&.

Dica 2 — Estrutura
int[] contagem = new int[4]  // zerado automaticamente

para cada nota lida
    se nota <= 4  → contagem[0]++
    se nota <= 6  → contagem[1]++
    se nota <= 8  → contagem[2]++
    senão          → contagem[3]++

exibir contagem[0], contagem[1], contagem[2], contagem[3]
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura e classificação
int[] contagem = new int[4];

for (int i = 0; i < 10; i++)
{
    Console.Write("Nota " + (i + 1) + ": ");
    int nota = Convert.ToInt32(Console.ReadLine());

    if (nota <= 4)
        contagem[0]++;
    else if (nota <= 6)
        contagem[1]++;
    else if (nota <= 8)
        contagem[2]++;
    else
        contagem[3]++;
}
Passo 2 — Exibir o histograma
Console.WriteLine("Insuficiente (0–4): " + contagem[0]);
Console.WriteLine("Regular (5–6): "      + contagem[1]);
Console.WriteLine("Bom (7–8): "          + contagem[2]);
Console.WriteLine("Ótimo (9–10): "       + contagem[3]);

Exercício 08 — Potências de 2

array v[i] = f(v[i-1]) construção progressiva

Construa um array de 8 posições onde o primeiro elemento vale 2 e cada elemento seguinte é o dobro do anterior: pot[i] = pot[i-1] * 2.

A ideia é inicializar explicitamente apenas o primeiro elemento: pot[0] = 2. Os demais elementos do vetor serão calculados posteriormente, dentro do for, usando sempre o valor da posição anterior.

Exiba todos os valores do array. Em seguida, percorra-o novamente para encontrar e exibir o primeiro elemento que ultrapassa 100 e sua posição (índice).

Saída esperada

pot[0] = 2
pot[1] = 4
pot[2] = 8
pot[3] = 16
pot[4] = 32
pot[5] = 64
pot[6] = 128
pot[7] = 256
Primeiro acima de 100: 128 (posição 6)

Dica 1 — Raciocínio

A chave deste exercício é que cada elemento depende do elemento anterior: pot[i] = pot[i - 1] * 2. Por isso, atribua pot[0] = 2 antes do laço e comece o for a partir de i = 1. Sem o array, não seria possível calcular pot[6] sem ter calculado e guardado todos os anteriores.

Dica 2 — Estrutura
pot[0] = 2
para i de 1 até 7
    pot[i] = pot[i - 1] * 2

para i de 0 até 7
    exibir "pot[" + i + "] = " + pot[i]

para i de 0 até 7
    se pot[i] > 100
        exibir "Primeiro acima de 100: " + pot[i] + " (posição " + i + ")"
        parar
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Construir o array
int[] pot = new int[8];
pot[0] = 2;
for (int i = 1; i < pot.Length; i++)
{
    pot[i] = pot[i - 1] * 2;
}
Passo 2 — Exibir e encontrar o primeiro acima de 100
for (int i = 0; i < pot.Length; i++)
{
    Console.WriteLine("pot[" + i + "] = " + pot[i]);
}

for (int i = 0; i < pot.Length; i++)
{
    if (pot[i] > 100)
    {
        Console.WriteLine("Primeiro acima de 100: " + pot[i] + " (posição " + i + ")");
        break;
    }
}

Exercício 09 — Pokémon acima da média

array dois percursos arrays paralelos

Considere os seguintes vetores paralelos, contendo nomes de Pokémon e seus respectivos HPs (pontos de vida):

string[] nomes =
{
    "Bulbasaur", "Charizard", "Pikachu", "Jigglypuff", "Snorlax",
    "Gengar", "Machamp", "Onix", "Lapras", "Mewtwo"
};

int[] hp =
{
    45, 78, 35, 115, 160,
    60, 90, 35, 130, 106
};

Calcule a média de HP do grupo e, em seguida, exiba o nome e o HP de todos os Pokémon que ficaram acima da média.

Este exercício exige necessariamente dois percursos: o primeiro para calcular a média (impossível sem ter todos os HPs), o segundo para comparar cada valor com ela.

Exemplo de Entrada e Saída

Vetores:
Bulbasaur / 45   Charizard / 78   Pikachu / 35   Jigglypuff / 115   Snorlax / 160
Gengar / 60   Machamp / 90   Onix / 35   Lapras / 130   Mewtwo / 106

Saída:
Média de HP: 85.4
Acima da média:
  Jigglypuff (115)
  Snorlax (160)
  Machamp (90)
  Lapras (130)
  Mewtwo (106)

Dica 1 — Raciocínio

A média só pode ser calculada depois que todos os HPs forem considerados. Por isso o array é indispensável: você precisa guardar os valores para fazer a segunda varredura de comparação.

Use dois arrays paralelos: nomes[i] e hp[i] guardam os dados do mesmo Pokémon. Ao encontrar um HP acima da média, use o mesmo índice i para acessar o nome correspondente.

Dica 2 — Estrutura
declarar vetores nomes e hp

soma = 0
para i de 0 até hp.Length - 1 → soma += hp[i]
media = soma / hp.Length

exibir "Média de HP: " + media
para i de 0 até hp.Length - 1
    se hp[i] > media
        exibir nomes[i] + " (" + hp[i] + ")"
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Declarar os vetores
string[] nomes = { "Bulbasaur", "Charizard", "Pikachu", "Jigglypuff", "Snorlax",
                   "Gengar", "Machamp", "Onix", "Lapras", "Mewtwo" };
int[] hp = { 45, 78, 35, 115, 160, 60, 90, 35, 130, 106 };
Passo 2 — Calcular a média e exibir os acima
double soma = 0;
for (int i = 0; i < hp.Length; i++)
    soma += hp[i];
double media = soma / hp.Length;

Console.WriteLine("Média de HP: " + media);
Console.WriteLine("Acima da média:");
for (int i = 0; i < nomes.Length; i++)
{
    if (hp[i] > media)
        Console.WriteLine("  " + nomes[i] + " (" + hp[i] + ")");
}

Exercício 10 — Rotação circular

array deslocamento rearranjo in-place

Leia 5 inteiros e armazene-os em um array. Aplique uma rotação circular à direita: o último elemento passa a ocupar a primeira posição e todos os outros avançam uma posição.

Exiba o array antes e depois da rotação. Não use um segundo array — resolva guardando o último elemento em uma variável auxiliar, deslocando os elementos dentro do próprio array e, ao final, colocando o valor salvo na posição [0].

Exemplos rápidos de uma rotação à direita
[1, 2, 3, 4] [4, 1, 2, 3]
[10, 20, 30] [30, 10, 20]
[7, 9] [9, 7]

Visualização da rotação circular à direita

Estado inicial
ultimo = 50 [0] [1] [2] [3] [4] 10 20 30 40 50

O último valor é salvo em uma variável auxiliar antes dos deslocamentos.

Estado atual: v = { 10, 20, 30, 40, 50 } Próxima rotação: 50 vai para [0]
Exemplo de Entrada e Saída

Entrada: 10 20 30 40 50

Saída:
Antes: 10 20 30 40 50
Depois: 50 10 20 30 40

Dica 1 — Raciocínio

O deslocamento deve ser feito da direita para a esquerda: se você percorrer da esquerda para a direita, cada elemento sobrescreveria o próximo antes de ser copiado. O laço correto é:

for (int i = v.Length - 1; i > 0; i--)
{
    v[i] = v[i - 1];
}

Antes desse laço, salve v[v.Length - 1] em uma variável. Depois do laço, coloque essa variável em v[0].

Dica 2 — Estrutura
ler v[0..4]
exibir "Antes: " + v

ultimo = v[v.Length - 1]
para i de (v.Length - 1) até 1, decrementando
    v[i] = v[i - 1]
v[0] = ultimo

exibir "Depois: " + v
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura e exibição inicial
int[] v = new int[5];
for (int i = 0; i < v.Length; i++)
{
    Console.Write("Elemento " + (i + 1) + ": ");
    v[i] = Convert.ToInt32(Console.ReadLine());
}

Console.Write("Antes:  ");
for (int i = 0; i < v.Length; i++)
    Console.Write(v[i] + " ");
Console.WriteLine();
Passo 2 — Rotacionar e exibir resultado
int ultimo = v[v.Length - 1];
for (int i = v.Length - 1; i > 0; i--)
{
    v[i] = v[i - 1];
}
v[0] = ultimo;

Console.Write("Depois: ");
for (int i = 0; i < v.Length; i++)
    Console.Write(v[i] + " ");
Console.WriteLine();

Exercício 11 — Intercalar dois arrays

array construção de novo array índice calculado

Considere os arrays de tamanho 4:

int[] a = { 1, 3, 5, 7 };
int[] b = { 2, 4, 6, 8 };

Construa um terceiro array de 8 posições que intercale os elementos dos dois: c[0]=a[0], c[1]=b[0], c[2]=a[1], c[3]=b[1], e assim por diante.

Use a relação c[2*i] = a[i] e c[2*i+1] = b[i] para calcular o índice de destino dentro de um único for.

Visualização dos índices no array intercalado
a 1[0] 3[1] 5[2] 7[3]
b 2[0] 4[1] 6[2] 8[3]
c 1[0] 2[1] 3[2] 4[3] 5[4] 6[5] 7[6] 8[7]

Para i = 0: a[0] vai para c[0] e b[0] vai para c[1].

Exemplo de Entrada e Saída

A: 1 3 5 7   B: 2 4 6 8

Saída:
Intercalado: 1 2 3 4 5 6 7 8

Dica 1 — Raciocínio

Para cada índice i (de 0 a 3), o elemento a[i] vai para a posição par do resultado e b[i] vai para a posição seguinte (ímpar). As posições pares são 0, 2, 4, 6 e as ímpares 1, 3, 5, 7 — exatamente 2*i e 2*i+1.

Dica 2 — Estrutura
declarar a[4] e b[4]
declarar c[8]
para i de 0 até 3
    c[2 * i]     = a[i]
    c[2 * i + 1] = b[i]

exibir "Intercalado: " + c
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Declarar os arrays dados
int[] a = { 1, 3, 5, 7 };
int[] b = { 2, 4, 6, 8 };
Passo 2 — Construir e exibir o array intercalado
int[] c = new int[8];
for (int i = 0; i < 4; i++)
{
    c[2 * i]     = a[i];
    c[2 * i + 1] = b[i];
}

Console.Write("Intercalado: ");
for (int i = 0; i < c.Length; i++)
    Console.Write(c[i] + " ");
Console.WriteLine();

Exercício 12 — Detectar duplicata

array loops aninhados busca O(n²)

Leia 7 inteiros. Verifique se algum valor aparece mais de uma vez no array. Se houver repetição, exiba o primeiro valor duplicado encontrado; caso contrário, informe que todos os valores são únicos.

Use dois for aninhados: o externo percorre cada elemento v[i]; o interno percorre apenas os elementos seguintes v[j] com j > i, comparando os dois. Ao encontrar a primeira duplicata, interrompa ambos os laços.

Exemplo — com duplicata

Entrada: 5 3 8 3 1 7 2  →  Saída: Valor repetido: 3

Exemplo — sem duplicata

Entrada: 5 3 8 4 1 7 2  →  Saída: Nenhum valor repetido.

Dica 1 — Raciocínio

Para cada posição i, compare v[i] com todas as posições j onde j > i. Iniciar j em i + 1 evita comparar um elemento consigo mesmo e evita checar o mesmo par duas vezes.

Use uma variável bool encontrou = false. Ao encontrar a primeira duplicata, defina encontrou = true, salve o valor e use break para sair do laço interno. Use && !encontrou na condição do laço externo para sair também dele.

Dica 2 — Estrutura
ler v[0..6]

encontrou = falso
duplicata = 0

para i de 0 até 6, enquanto !encontrou
    para j de (i+1) até 6
        se v[i] == v[j]
            duplicata = v[i]
            encontrou = verdadeiro
            parar laço interno

se encontrou
    exibir "Valor repetido: " + duplicata
senão
    exibir "Nenhum valor repetido."
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Leitura dos números
int[] v = new int[7];
for (int i = 0; i < v.Length; i++)
{
    Console.Write("Número " + (i + 1) + ": ");
    v[i] = Convert.ToInt32(Console.ReadLine());
}
Passo 2 — Buscar a primeira duplicata
bool encontrou = false;
int duplicata = 0;

for (int i = 0; i < v.Length && !encontrou; i++)
{
    for (int j = i + 1; j < v.Length; j++)
    {
        if (v[i] == v[j])
        {
            duplicata = v[i];
            encontrou = true;
            break;
        }
    }
}

if (encontrou)
    Console.WriteLine("Valor repetido: " + duplicata);
else
    Console.WriteLine("Nenhum valor repetido.");

Exercício 13 — Fibonacci

array v[i] = f(v[i-1], v[i-2]) construção progressiva

Construa um array de 10 posições com os primeiros 10 números da sequência de Fibonacci: fib[0] = 1, fib[1] = 1 e, para os demais, fib[i] = fib[i-1] + fib[i-2].

Exiba todos os valores em uma linha, separados por espaço. Em seguida, percorra o array e conte quantos elementos são menores que 30.

Saída esperada

Sequência: 1 1 2 3 5 8 13 21 34 55
Menores que 30: 8

Dica 1 — Raciocínio

Para calcular fib[i] você precisa de dois valores já guardados: fib[i-1] e fib[i-2]. Por isso o laço de construção começa em i = 2, após os dois valores iniciais serem atribuídos manualmente. Sem o array armazenando os elementos anteriores, o cálculo seria impossível.

Dica 2 — Estrutura
fib[0] = 1
fib[1] = 1
para i de 2 até 9
    fib[i] = fib[i - 1] + fib[i - 2]

exibir "Sequência: "
para i de 0 até 9
    exibir fib[i] + " "

contador = 0
para i de 0 até 9
    se fib[i] < 30 → contador++

exibir "Menores que 30: " + contador
Solução — passo a passo

A solução será revelada em etapas. Tente completar cada passo antes de avançar.

Passo 1 — Construir a sequência
int[] fib = new int[10];
fib[0] = 1;
fib[1] = 1;
for (int i = 2; i < fib.Length; i++)
{
    fib[i] = fib[i - 1] + fib[i - 2];
}
Passo 2 — Exibir e contar
Console.Write("Sequência: ");
for (int i = 0; i < fib.Length; i++)
{
    Console.Write(fib[i] + " ");
}
Console.WriteLine();

int contador = 0;
for (int i = 0; i < fib.Length; i++)
{
    if (fib[i] < 30) contador++;
}
Console.WriteLine("Menores que 30: " + contador);