Contar quantas vezes um número se repete num vetor

Faça um programa em C que leia um vetor de 20 posições e no fim mostre quais os números lidos e quantas
vezes cada um aparece no vetor. Ex.:
a) Entrada: 1 1 2 2 2 1 1 22 1 1 22 2 2 2 1 1 2 2 1 1
b) Saída: 1: 10 vezes 2: 8 vezes
22: 2 vezes

Como faço isso?
Já tentei criando um for dentro de um for, mas não deu certo.
O jeito que fiz (e tá errado):
#include <stdio.h>

int main(){
	int vect[20];
	int count;
	for (int i = 0; i < 20; i++){
		printf("#%d", i+1);
		scanf("%d", &vect[i]);
	}
	for (int i = 0; i < 20; i++){
		for (int j = i + 1; j < 20; j++){
			if (vect[i] == vect[j]){
				count++;
			}
		}
		printf("O número %d aparece %d vezes.", vect[i], count);
		count = 0;
	}
}

Uma forma de resolver:

#include<stdio.h>
#include<stdlib.h>

const int TAMANHO = 20;

void exibirNumeros(int *listaNumerica){
    int i;

    printf("\n\nNúmeros digitados...\n\n");
    for(i = 0; i < TAMANHO; i++){
        printf("vetor[%d] = %d\n", i, listaNumerica[i]);
    }
}

int* verificar(int *listaNumerica, int *resultado){
    int i, j, k = 0, contador;
    int vetor[TAMANHO];

    for(i = 0; i < TAMANHO; i++){
        vetor[i] =  listaNumerica[i];
    }

    for(i = 0; i < TAMANHO; i++){
        contador = 0;
        for(j = k++; j < TAMANHO; j++){
            if(listaNumerica[i] == vetor[j]){
                contador++;
                vetor[j] = -1;
            }
        }
        resultado[i] = contador;
    }
    return resultado;
}

int main(){
    int i, contador = 1;
    int vetor[TAMANHO];
    int vetorResultado[TAMANHO];

    printf("Informe os números...\n\n");
    for(i = 0; i < TAMANHO; i++){
        printf("Valor %d: ", contador++);
        scanf("%d", &vetor[i]);
    }

    exibirNumeros(vetor);
    verificar(vetor, vetorResultado);

    for(i = 0; i < TAMANHO; i++){
        if(vetorResultado[i] > 0)
            printf("%d: %d vezes.\n", vetor[i], vetorResultado[i]);
    }

    printf("\n\n");
    system("pause");
    return 0;
}

Rodando…

image
image
image

Esse algoritmo tem uma falha. Para evitar que os números sejam contabilizados indevidamente, sempre que uma passagem é efetuada (iteração completa do índice j), o número repetido é trocado por -1. No entanto, como parece óbvio, se houver -1 no vetor original a contabilização será deturpada. De qualquer forma, pode servir de norte para ti.

1 curtida