Faça um programa que leia dois números Ne Me :
- Crie e leia uma matriz de inteiros
;
- 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.
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
(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
, comparamos: se
então deslocamos
(e posições) e atualizamos
com
; caso contrário, se
deslocamos
e atualizamos
com
; caso contrário, se
atualizamos
com
.
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>
#include <limits.h>
int main() {
int N, M;
// Leitura das dimensões
scanf("%d %d", &N, &M);
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;
}