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>
int main(){
int vect[20];
int count;
for (int i = 0; i < 20; i++){
printf("#%d", i+1);
scanf("%d", &vect[i]);
}
for (int i = 0; i < 20; i++){
for (int j = i + 1; j < 20; j++){
if (vect[i] == vect[j]){
count++;
}
}
printf("O número %d aparece %d vezes.", vect[i], count);
count = 0;
}
}
Uma forma de resolver:
#include<stdio.h>
#include<stdlib.h>
const int TAMANHO = 20;
void exibirNumeros(int *listaNumerica){
int i;
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){
int i, j, k = 0, contador;
int vetor[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;
}
return resultado;
}
int main(){
int i, contador = 1;
int vetor[TAMANHO];
int vetorResultado[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");
return 0;
}
Rodando…
![image](https://www.guj.com.br/uploads/default/original/3X/c/9/c9068195c11af8bdbd484efe22892c68ffc65b63.png)
![image](https://www.guj.com.br/uploads/default/original/3X/0/f/0f721b0f03b240f6d1f2e9f5d5f6e285d35cd545.png)
![image](https://www.guj.com.br/uploads/default/original/3X/6/2/623474dbb05a1504c3f53a69d8da400cb29b4230.png)
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.
1 curtida