1171 - Frequência de Números
Contando quantas vezes números de 1 a 2000 aparecem na entrada. 1 a 2000, esse detalhe é bem importante!
Descrição
Solução
Como os números que estão vindo na entrada pertencem a um intervalo bem específico e definido (números de 1 e 2000), temos como opção montarmos um vetor que guarda a frequência de cada um desses números. Começando o vetor inteiro com zero, vamos usar a posição i do vetor para determinar quantas vezes o número i apareceu na entrada (sim, usamos o índice como informação relevante para esse problema). Logo, para cada número, contamos +1 no elemento correspondente e na hora de imprimir percorremos todos os 2000 números, imprimindo apenas para as posições maiores que zero.
Para o código em C++, eu consegui implementar usando a estrutura de dados map, que já ordena todos os índices automaticamente. Com isso, podemos usar map
em C++ para limites que não são tão definidos assim, mas essa não é a norma e é algo específico dessa estrutura de dados para essa linguagem específica.
#include <string.h>
#include <stdio.h>
int main(){
int n, x, frequencias[2001];
memset(frequencias, 0, sizeof(frequencias));
scanf("%d", &n);
for(int i = 0; i < n; ++i){
scanf("%d", &x);
++frequencias[x];
}
for(int i = 1; i < 2001; ++i){
if(frequencias[i] > 0) printf("%d aparece %d vez(es)\n", i, frequencias[i]);
}
return 0;
}
Last updated
Was this helpful?