Ir ao conteúdo
  • Cadastre-se

Verificar quantos elementos são diferentes em um vetor


Salmo

Posts recomendados

Olá galera. Estou com dificuldades de tentar encontrar uma lógica para descobrir os valores diferentes de um vetor, eu primeiramente ordenar os vetores, mas posteriormente não consigo de maneira alguma encontrar uma logica para comparar os números e fazer a contagem dos diferentes. segue a questão e depois meu algoritmo.

QUESTÃO

O dono do zoológico quer a lista de todas as especies de animais que existem no zoológico. Para isso ele te deu uma lista de todos
os animais. Sabendo que o zoológico suporta no máximo 100 animais, ele quer que você faça um programa em C que retorne a quantidade de espécies diferentes.

Considere que um número representa uma espécie.

Não use uma função de ordenar pronta.

Entrada: 

linha 1: um número com a quantidade de elementos do vetor (1 até 100)
linha 2: o vetor de inteiros que representam os animais.
Saída: a quantidade de espécies

Exemplos:

>>

1 1 2
<<
2

 

ALGORITMO

#include <stdio.h>

/*O dono do zoológico quer a lista de todas as especies de animais que existem no zoológico. Para isso ele te deu uma lista de todos
os animais. Sabendo que o zoológico suporta no máximo 100 animais, ele quer que você faça um programa em C que retorne a quantidade de
*espécies diferentes.
*- Considere que um número representa uma espécie.*/

void select_sort(int animais[],int tam)
{
	int i,j;
	
	for (i=0;i<tam-1;i++)
	{
		int menor=i,aux;
		for(j=i+1;j<tam;j++)
		{
			if(animais[j]<animais[i])
			{
				menor=j;
			}
			
			if(i!=menor)
			{
				aux=animais[i];
				animais[i]=animais[menor];
				animais[menor]=aux;
			}
		}
	}

}

int main ()
{
	int animais[100],tam,i,j,diferentes=1;
	
	//limitando o maximo e minimo do vetor
	do 
	{
		printf("Qual a quantidade de animais que voce ira digitar (entre 1 e 100) ? --> ");
		scanf("%d",&tam);
	}
	while(tam<1 || tam>100 );
	
	//recebendo valores do vator
	for(i=0;i<tam;i++) 
	{
		printf("Digite o numero do animal  --> ");
		scanf("%d",&animais[i]);
	}
	
	//função que deixa os valores ordenados
	select_sort(animais,tam);
	 
	
	//testando quantos valores sao diferentes
	for(i=0;i<(tam-1);i++) 
	{
		for(j=1;j<tam;j++)
		{
			if (animais[i]!=animais[j])
			{
				diferentes++;
			}
			
		}
	}
	
	printf("%d",diferentes);
	 
	return 0;
	
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Salmo    então o que você precisa é excluir o número que já tiver sido digitado, ficando apenas os números que não se repetem,   experimente esse código :

#include <stdio.h>
#include <conio.h>
int main (){
	int animais[100],animais2[100],tam,i,j,aux,diferentes=1;
	/*//limitando o maximo e minimo do vetor*/
	do{
		printf("Qual a quantidade de animais que voce ira digitar (entre 1 e 100) ? --> ");
		scanf("%d",&tam);
	}
	while(tam<1 || tam>100 );
	/*//recebendo valores do vator*/
	for(i=0;i<tam;i++)
	{
		printf("Digite o numero do animal  --> ");
		scanf("%d",&animais[i]);
		animais2[i]=animais[i];
	}
    /*remove animais iguai da lista deixando apenas um*/
	for(i=0;i<tam;i++){
		for(j=0;j<tam;j++){
		    if(i != j){
			    if (animais2[i] == animais2[j]){
				    diferentes++;
				    animais2[i]=0;
			    }
		    }
		}
	}
    /*/função que deixa os valores ordenados*/
    for(i=0;i<tam-1;i++){
        for(j=i+1;j<tam;j++){
            if(animais2[j]  < animais2[i]){
                aux         = animais2[i];
                animais2[i] = animais2[j];
                animais2[j] = aux;
            }
        }
    }
	printf("\n");
	j=1;
	diferentes=0;
	for(i=0;i<tam;i++){
        if(animais2[i]!=0){printf("\n%d%c Animal --> %d",j,167,animais2[i]);j++;diferentes++;}
	}
	printf("\n\nA Quantidade De Especies Diferentes %c %d",130,diferentes);
	getch();
	return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!