Faça um programa que leia dois números Ne Me :
  • Crie e leia uma matriz de inteiros N times M;
  • Localize os três maiores números de uma matriz e mostre a linha e a coluna onde estão.

Passo 1

O enunciado pede um programa em que lemos dois inteiros N e M, criamos uma matriz de dimensão N×M, preenchemos com valores inteiros e, em seguida, localizamos os três maiores elementos nessa matriz, mostrando também suas linhas e colunas. O conteúdo aqui é manipulação de matrizes e algoritmo de busca dos k maiores valores.

Passo 2

Devemos declarar as variáveis: N e M (dimensões), a matriz (poder ser um VLA em C99 ou alocada dinamicamente), três variáveis para armazenar os valores máximos (max1, max2, max3), e seis variáveis para guardar as posições correspondentes (linha1, coluna1; linha2, coluna2; linha3, coluna3).
Lemos N e M via teclado. Em seguida, lemos cada elemento da matriz usando dois loops aninhados de 0 a N-1 e de 0 a M-1.

Passo 3

Inicializamos max1, max2 e max3 com um valor muito pequeno, por exemplo INTMIN (incluso via <limits.h>), e inicializamos todas as posições com -1.

Passo 4

Fazemos um terceiro par de loops para percorrer toda a matriz. Para cada elemento x = a[i][j], comparamos: se x > max1 então deslocamos max1tomax2,,max2tomax3 (e posições) e atualizamos max1=x com (i,j); caso contrário, se x>max2 deslocamos max2tomax3 e atualizamos max2=x com (i,j); caso contrário, se x>max3 atualizamos max3=x com (i,j).

Passo 5

Por fim, imprimimos os três maiores valores e suas posições (soma +1 nas linhas/colunas se quisermos índice começando em 1).

Resposta

#include <stdio.h>
#include <limits.h>
int main() {
int N, M;
// Leitura das dimensões
scanf("%d %d", &N, &M);
// Declaração da matriz (VLA em C99)
int a[N][M];

// Leitura dos elementos da matriz
for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
        scanf("%d", &a[i][j]);
    }
}

// Inicialização dos três maiores com valor mínimo
int max1 = INT_MIN, max2 = INT_MIN, max3 = INT_MIN;
int l1 = -1, c1 = -1;
int l2 = -1, c2 = -1;
int l3 = -1, c3 = -1;

// Busca dos três maiores
for (int i = 0; i < N; i++) {
    for (int j = 0; j < M; j++) {
        int x = a[i][j];
        if (x > max1) {
            // desloca 1->2, 2->3
            max3 = max2; l3 = l2; c3 = c2;
            max2 = max1; l2 = l1; c2 = c1;
            // atualiza a nova maior
            max1 = x; l1 = i; c1 = j;
        } else if (x > max2) {
            // desloca 2->3
            max3 = max2; l3 = l2; c3 = c2;
            // atualiza o segundo maior
            max2 = x; l2 = i; c2 = j;
        } else if (x > max3) {
            // atualiza o terceiro maior
            max3 = x; l3 = i; c3 = j;
        }
    }
}

// Impressão dos resultados (índices podem ficar em 0-based ou +1 se desejar)
printf("Maior 1: valor = %d, linha = %d, coluna = %d\n", max1, l1, c1);
printf("Maior 2: valor = %d, linha = %d, coluna = %d\n", max2, l2, c2);
printf("Maior 3: valor = %d, linha = %d, coluna = %d\n", max3, l3, c3);

return 0;
}

Exercícios relacionados