Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Severn

Quantidade de valores distintos em um vetor

Recommended Posts

O problema é receber um vetor, por exemplo v = {2, 3, 5, 1, 2, 3, 7, 8}, e imprimir a quantidade de valores distintos, que nesse caso é 6, apesar de o vetor possuir 8 valores. Como faço esse código em C++?

Compartilhar este post


Link para o post
Compartilhar em outros sites


#include <iostream>

 

using namespace std;

 

int vetor[10010]; // a questão diz que o número de elementos pode chegar a 10010, e não estamos preocupados com memória

 

int main(){

int qtdElementos, qtdRepetidos;

// recebendo quantidade de elementos que o vetor terá

cin >> qtdElementos;

// recebendo valores e colocando no vetor

for (int i = 0;i<qtdElementos;i++){

cin >> vetor;

}

 

// agora quero verificar a quantidade de posições que possuem valores distintos

// não faço idéia de como fazer isso :/

 

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

1- A mais básica: usar um segundo vetor no qual você coloca os elementos que nunca foram vistos no primeiro vetor.

#include <iostream>
using namespace std;

int main(void){
    int vetor[10010];
    int qtdElementos;
    cin >> qtdElementos;
 
    int dup[qtdElementos];
    int pos_dup=0;

    for (int i = 0;i<qtdElementos;i++) {
        cin >> vetor[i];
        for(int j=0; j<pos_dup && dup[pos_dup]!=vetor[i];j++);
        if(j>=pos_dup) {
           dup=vetor[i];
           pos_dup++;
       }
    }
   cout << pos_dup << endl;
    return 0;
}

2- Utilizando as propriedades dos conjuntos:
#include <iostream>
#include <set>
using namespace std;
 
int main(void) {
   int vetor[] = {1,6,32,5,7,6,4,2,1,54,3,9,4};
   set<int> conjunto (vetor, vetor+13);
   cout << conjunto.size() << endl;
   return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>
#include <set>
using namespace std;
 
int main(void) {
   int vetor[] = {1,6,32,5,7,6,4,2,1,54,3,9,4};
   set<int> conjunto (vetor, vetor+13); //isso aqui vai salvar os números do vetor dentro do set de forma ordenada, correto?
   cout << conjunto.size() << endl; //isso aqui vai exibir o tamanho do set, correto?
   return 0;
}

não consegui visualizar nesse código o numero de elementos distintos..

 

desculpe-me, mas não entendi muito bem o primeiro código, poderia comentar ele pra mim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembra das aulinhas básicas sobre conjuntos no colégio? Conjuntos não contem elementos repetidos e não são ordenados. Se vc criar um conjunto a partir de uma lista, ele vai inserir os números apenas 1 vez. Daí é óbvio que o tamanho do conjunto é a quantidade de números do array desconsiderando as repetições.

Faz um teste de mesa aí. Roda no papel. Vida de programador também é isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.