Ir ao conteúdo
  • Cadastre-se

C++ Ordenar vetor, e verificar se existem numeros repetidos


matheusim

Posts recomendados

Ola pessoal, gostaria de ajuda para resolver esse exercicio:

Dado um vetor de tamanho N (não maior que 15) inserido pelo usuário. Faça um algoritmo que indique ordene o vetor e mostre a quantidade de valores repetidos. Para isso deve-se utilizar a busca binária com cada um dos valores do vetor.

Exemplo: Digite o tamanho do vetor: 7

Digite os valores do vetor: 1 2 5 2 -7 2 1

Vetor ordenado: -7 1 1 2 2 2 5

O valor 1 esta repetido 2 vezes

O valor 2 esta repetido 4 vezes

Eu ja fiz ate a parte de ordenacao, mas nao consegui verificar se existem numeros repetidos, aqui esta o meu codigo:

 
#include<stdio.h>

int main() {
    int vetor[15],tam,i,k,aux;

    printf("Digite o tamanha do vetor: ");
    scanf("%d",&tam);
    printf("Digite os valores do vetor: ");
    for (i=0;i<tam;i++) {
        scanf("%d",&vetor[i]);
    }
    //Ordenando o vetor
    for (k=0;k<=tam-2;k++) {
        for (i=0;i<=tam-2;i++) {
            if (vetor[i]>vetor[i+1]) {
                aux=vetor[i];
                vetor[i]=vetor[i+1];
                vetor[i+1]=aux;                         
            }
        }                   
    }
    //Mostrando o vetor ordenado
    printf("Vetor ordenado: ");
    for (i=0;i<tam;i++) {
        printf("%d ",vetor[i]);
    }
    //Verificando numeros repetidos




getchar();
getchar();
return(1);    
}

Por favor, me ajudem

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

Bom, para verificar se existem valores repetidos, você pode fazer uma varredura pelo vetor, e verificar se o item atual é igual ao item anterior.


int temp;
int repetidos = 1;


//Verificando numeros repetidos
temp = vetor[0]; // Primeiro valor não entra na varredura
for (i=1;i<tam;i++) {
if( vetor[i] == temp ){
repetidos++; // Enquanto tiverem valores iguais em sequencia, incrementa este contador
}
else {
// Se deu valor diferente do anterior, verifica se teve repetições
if( repetidos > 1 ) {
printf("O valor %i esta repetido %i vezes\n", temp, repetidos);
repetidos = 1;
}
// E atualiza este valor de comparação
temp = vetor[i];
}
}
// Fim do loop, mas ainda não testamos se o último valor do vetor é repetido ou não, então...
if( repetidos > 1 ) {
printf("O valor %i esta repetido %i vezes\n", temp, repetidos);
}

Na verdade não estamos usando algoritmo de busca binária, mas ela não faz sentido se estamos querendo simplesmente contar o número de repetições.

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

  • 7 anos depois...
Em 28/10/2009 às 08:16, AlexandreHDK disse:

n sei o que tem de erro no seu código, mas o primeiro valor a ser verificado nao conta corretamente a quantidade de valores repetidos. eu adequei o seu código ao meu, todos funcionam perfeitamente menos o primeiro valor digitado:

adicionado 1 minuto depois

 

@israel mafra

 printf("\nMatriz digitada:\n");
      SameValues = a[0];        
      for(i=0;i<tam;i++){
           
           if (a[i] == SameValues){
              repeated++;     
              }
           else {               
                if ( repeated > 1 ) {
                   printf("O valor %i esta repetido %i vezes\n", SameValues, repeated);
                   repeated = 1;
                }
          
     SameValues = a[i];
             }
          }
          
      if ( repeated > 1 ) {
         printf("O valor %i esta repetido %i vezes\n", SameValues, repeated);
         }
        
       return 0;
       }

 

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

@israel mafra      experimente esse código aqui,   testei aqui e nenhum número ficou esquecido :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int vetor[150],vetor2[150][2],tam,i,k,aux,zero;
int main(){
    printf("Digite o tamanho do vetor, no maximo 150 : ");
    scanf("%d",&tam);
    printf("Digite os valores do vetor: ");
    for(i=0;i<tam;i++){
        scanf("%d",&vetor[i]);
        vetor2[i][0]=vetor[i];
    }
    //Ordenando o vetor
    for (k=0;k<=tam-2;k++){
        for (i=0;i<=tam-2;i++){
            if (vetor[i]>vetor[i+1]){
                aux=vetor[i];
                vetor[i]=vetor[i+1];
                vetor[i+1]=aux;
            }
        }
    }
    //Mostrando o vetor ordenado
    printf("Vetor ordenado: \n");
    for (i=0;i<tam;i++) {
        printf("%d ",vetor[i]);
    }
    //Verificando numeros repetidos
    for(i=0;i<tam;i++){
        if(vetor2[i][0]==0){
            zero++;
        }
    }
    for(i=0;i<tam;i++){
        for(k=0;k<tam;k++){
            if(i != k){
                if(vetor2[i][0]==vetor2[k][0]){
                    vetor2[k][0]=0;
                    vetor2[i][1]++;
                }
            }
        }
    }
    printf("\n\n");
    if(zero>0){
        if(zero==1){
            printf("O Numero 0 Saiu 1 Vez\n");
        }
        if(zero>1){
            printf("O Numero 0 Saiu %d Vezes\n",zero);
        }
    }
    for(i=0;i<tam;i++){
        if(vetor2[i][0]!=0)
            printf("O Numero %d Saiu %d vezes\n",vetor2[i][0],(vetor2[i][1])+1);
    }
    getch();
    return(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...