Escreva uma função que aceita como parâmetro um array de inteiros com
valores, e determina o maior elemento do array e o número de vezes que este elemento ocorreu no array. Por exemplo, para um array com os seguintes elementos:
,
, a função deve retorna para o programa que a chamou o valor 15 e o número 3 (indicando que o número 15 ocorreu 3 vezes). A função deve ser do tipo void.
Passo 1
Estamos com um array de inteiros de tamanho N e precisamos criar uma função void que determine o maior elemento do array e quantas vezes ele ocorre.
Passo 2
Para não precisar de duas passagens pelo array, vamos fazer em uma única varredura: inicializamos duas variáveis locais, uma para armazenar o maior valor encontrado (max) e outra para contar suas ocorrências (cnt). Atribuímos ao início max = arr[0] e cnt = 1. Percorremos o array de i = 1 até i = N−1. A cada elemento arr[i] fazemos: se arr[i] > max, então atualizamos max = arr[i] e resetamos cnt = 1. Se arr[i] == max, incrementamos cnt em 1.
Passo 3
Depois de terminar o loop, atribuiremos os valores de max e cnt aos parâmetros de saída (ponteiros) e retornamos, encerrando a função void.
Resposta
void find_max_and_count(int arr[], int N, int *max_val, int *count) {
if (N <= 0) {
*count = 0; // Se o array estiver vazio, não há ocorrências
return;
}
if (N <= 0) {
*count = 0; // Se o array estiver vazio, não há ocorrências
return;
}
int max = arr[0];
int cnt = 1;
for (int i = 1; i < N; i++) {
if (arr[i] > max) {
max = arr[i];
cnt = 1;
} else if (arr[i] == max) {
cnt++;
}
}
*max_val = max;
*count = cnt;
}