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