Ir ao conteúdo
  • Cadastre-se

C Problema de eliminação de duplicata


marcos12345

Posts recomendados

Questão:

Problema da eliminação de duplicatas. Use um array de subscrito único (ou seja, um
vetor) para ler 10 números, cada um entre 10 e 100, inclusive. À medida que cada número
for lido, imprima-o apenas se ele não for uma duplicata de um número já lido. Considere a
"pior das hipóteses": os 10 números são diferentes. Use o menor array possível para resolver
o problema.

#include <stdio.h>

int main(){
    int vetor[10],copia[10],i,j;
    for(i=0; i<10; i++){
        printf("Digite um numero entre 10 e 100");
        scanf("%d",&vetor[i]);
        for(j=i+1; j>0; j--){
            if(vetor[i]==vetor[j]){
                printf("o numero informado foi: %d\n",vetor[j]);
            }
        }
    }
    getchar();
}

o que eu conseguir fazer mas não deu certo preciso saber onde eu errei na minha logica

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

@Marcos Paulo feitosa        no inicio inicialize o vetor com o número zero, e dentro do primeiro for você precisa colocar um while para que só passe por ele se o número não for repetido, e dentro do while faça a leitura do número e em seguida coloque um loop for que percorra todo o vetor verificando se o número digitado é igual a algum número já lido e que está no vetor, se tiver algum igual coloque uma variável para informar isso, assim depois desse loop veja nessa variável, se não repetiu então coloque o número no vetor e saia do while, modificando o valor da variável que o controla, e assim pegar outro número  .

Link para o comentário
Compartilhar em outros sites

  • 3 anos depois...

Seguinte eu estava tentando fazer, sou ainda iniciante no assunto, porém fiz esse codigo, entretanto ele nao esta muito correto esta incompleto. gostaria muito da opnião de vocês pois ate agora nao consegui pensar em uma solução, o codigo:

 

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


int main() {
    
    int i, n[10]={0}, j, count, copia[10]={0};
    
    
    for(i=0;i<10;i++){
        printf("Numero: ");
        scanf("%d", &n[i]);
        
        while(count!=-1){
            
            for(j=1;j<=10;j++){
                if(n[i]==n[i-1]){
                    count=-1;
                }
            }
            if(count!=-1){
                printf("N: %d\n", n[i]);
            }
            count=-1;
        }
        count=0;
        
    }

    
    return 0;
}

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

Olá

 

Seu programa ainda tem muitos problemas :( mas está melhor que a primeira versão :) eu acho.

 

  • a lógica
    • você vai ler os dez valores de todo jeito, então o maior tamanho necessário é claro 10 porque podem ser todos diferentes
    • não há razão para um segundo vetor: basta não colocar duplicatas no vetor
    • isso quer dizer que precisar saber quantos valores tem lá dentro a cada momento, esse valor count que usou
    • não use valore globais com esses nominhos í' e 'j'. Isso é um desastre. Essas variáveis vão existir por todo o programa
    • não use getchar() ao final. Só vai enfurecer quem rodar o seu programa pra testar.
    • ao final da leitura mostre os valores lidos! Como vai saber se está certo?
    • teste o retorno de scanf(). Sempre. Não tem propósito seguir com o programa se não leu nada...
    • são apenas dez valores. Não há razão para inserir na ordem. Pelo contrário, é melhor e mais rápido simplesmente olhar um por um.
    • não há assim muita razão para inicializar os vetores porque via usar para ler os dados

 

Sobre essa parte

 

            scanf("%d", &n[i]);

       

	int n[10]={0};

 

  • não declare mais que uma variável por linha: o uso de linhas é grátis. Isso só cai na sua cabeça.
     
  • a posição do vetor que vai usar não é a posição i: é a posição count. Pense bem: só vai colocar no vetor os valores que não sejam duplicados... Se os 10 forem iguais no vetor só vai ter um...

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...