Arrays: elementos repetidos e número de ocorrências

Problema: dado um determinado array, como contar quais os elementos repetidos e o número de ocorrências de cada elemento?

Existem diversas maneiras de se conseguir isso, até porque algumas linguagens possuem uma extensa biblioteca para utilização com arrays. Mas, para treinar um pouco, vou mostrar uma solução em C++. O código já está comentado.

#include <stdio.h>
#include <string.h>
#include <iostream>
 
using namespace std;
 
// estrutura que contem o valor do número e a quantidade de ocorrências
struct number { 
  int value;
  int count;
};
 
// tamanho definido arbitrariarmente (para facilitar o exemplo)
#define MAX 8
 
// array de entrada
int a[MAX] = {5, 3, 5, 1, 1, 1, 2, 1};

// array com estrutura do número
number n[MAX];

int used = -1;
int found = 0;
const int NUL = -1;
 
int main(){
  int i, j;
 
  // inicializa array
  for(i=0; i<MAX; i++){
    n[i].value = NUL;
    n[i].count = NUL;
  }
 
  for(i=0; i<MAX; i++){
    found = 0;
    
    for(j=0; j<used; j++){
      // encontrou, incrementa e sair fora
      if (a[i] == n[j].value){
        n[j].count++;
        found = 1;
        break;
      }
    }
 
    // não encontrou o número, armazena
    if (not found) {
      used++;
      n[used].value = a[i];
      n[used].count = 1;
    }
  }
 
  // inicializa array
  for(i=0; i<used; i++){
    cout << i << " "<< n[i].value << " " << n[i].count << "\n\r";
  }
 
  getchar();
  return 0;
}

Comentários

Postagens mais visitadas deste blog

Netflix não mostra ícone de streaming

Concorrência com GO

Problema ao transferir arquivos grandes via FTP