Contar quantas vezes um número se repete num vetor
1 resposta
c
F
Fran.Silva
Faça um programa em C que leia um vetor de 20 posições e no fim mostre quais os números lidos e quantas
vezes cada um aparece no vetor. Ex.:
a) Entrada: 1 1 2 2 2 1 1 22 1 1 22 2 2 2 1 1 2 2 1 1
b) Saída: 1: 10 vezes 2: 8 vezes
22: 2 vezes
Como faço isso?
Já tentei criando um for dentro de um for, mas não deu certo.
O jeito que fiz (e tá errado): #include <stdio.h>
intmain(){intvect[20];intcount;for(inti=0;i<20;i++){printf("#%d",i+1);scanf("%d",&vect[i]);}for(inti=0;i<20;i++){for(intj=i+1;j<20;j++){if(vect[i]==vect[j]){count++;}}printf("O número %d aparece %d vezes.",vect[i],count);count=0;}}
#include<stdio.h>#include<stdlib.h>constintTAMANHO=20;voidexibirNumeros(int*listaNumerica){inti;printf("\n\nNúmeros digitados...\n\n");for(i=0;i<TAMANHO;i++){printf("vetor[%d] = %d\n",i,listaNumerica[i]);}}int*verificar(int*listaNumerica,int*resultado){inti,j,k=0,contador;intvetor[TAMANHO];for(i=0;i<TAMANHO;i++){vetor[i]=listaNumerica[i];}for(i=0;i<TAMANHO;i++){contador=0;for(j=k++;j<TAMANHO;j++){if(listaNumerica[i]==vetor[j]){contador++;vetor[j]=-1;}}resultado[i]=contador;}returnresultado;}intmain(){inti,contador=1;intvetor[TAMANHO];intvetorResultado[TAMANHO];printf("Informe os números...\n\n");for(i=0;i<TAMANHO;i++){printf("Valor %d: ",contador++);scanf("%d",&vetor[i]);}exibirNumeros(vetor);verificar(vetor,vetorResultado);for(i=0;i<TAMANHO;i++){if(vetorResultado[i]>0)printf("%d: %d vezes.\n",vetor[i],vetorResultado[i]);}printf("\n\n");system("pause");return0;}
Rodando…
Esse algoritmo tem uma falha. Para evitar que os números sejam contabilizados indevidamente, sempre que uma passagem é efetuada (iteração completa do índice j), o número repetido é trocado por -1. No entanto, como parece óbvio, se houver -1 no vetor original a contabilização será deturpada. De qualquer forma, pode servir de norte para ti.