Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

353
Vistas
Encontrar el número de elementos repetidos en una matriz usando C

No puedo encontrar la lógica correcta para encontrar la cantidad de elementos repetidos en una matriz. Puedo entender por qué mi lógica no funciona, pero no soy capaz de superarlo.

La siguiente es la pregunta real:

Escriba un programa que declare un arreglo entero arr de tamaño n . Primero toma un entero positivo n del usuario. Luego lee n números y los almacena en arr . Comprueba e imprime el número de repeticiones en arr . El resultado es la suma del número total de repeticiones en la matriz.
Ejemplo: Si arr = [4,3,4,4,3,4,5]
Entonces el número de repeticiones es 6 (que son 4 repeticiones de 4 + 2 repeticiones de 3 )

El siguiente es mi código:

 #include <stdio.h> int main() { int n, i, j, count = 1, p = 0; printf("Enter the length of array"); scanf("%d", &n); int arr[n]; for (i = 0; i < n; i++) { printf("Enter a number\n"); scanf("%d", &arr[i]); } for (i = 0; i < n; i++) { for (j = i + 1; j < n; j++) { if (arr[i] == arr[j]) { count++; break; } } if (count != 1) { p = p + count; count = 1; } } printf("Number of repetitions are %d", p); }

Para el código anterior, si tomamos la matriz como se menciona en la pregunta, cada vez que mi código encuentra dos 4 iguales, los cuenta a ambos, por lo tanto, mi programa termina contando un número extra de 4. Así que no puedo encontrar una mejor lógica para superarlo.
( Soy un principiante, así que no tengo muchas funciones/métodos avanzados utilizados en C )

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Una de las cosas que puede hacer es mantener una matriz adicional para los números que ha verificado y cada vez que compare números, verificará si ya ha visto este número o no.

También quiero incluir algunos otros enfoques para este problema. Si sabemos que los números en la lista no serán tan grandes, podemos usar una matriz para realizar un seguimiento de los recuentos.

 //numbers = {4, 3, 4, 4, 3, 4, 5} int max = findMaxValue(numbers); int counts[max]; //should be done with dynamic memory allocation for(i=0;i<max;i++){ counts[max] = 0; } for(i=0;i<numbers.size;i++){ counts[numbers[i]]++; } int sum = 0; for(i=0;i<max;i++){ if(counts[i] > 1){ sum += counts[i]; } }

Otra cosa que puede hacer es ordenar los números primero y luego comparar los elementos adyacentes.

over 4 years ago · Santiago Trujillo Denunciar

0

Creo que es una idea juntar los mismos elementos primero clasificándolos.

 #include<stdio.h> int main() { int n = 0, count = 0; printf("Enter the length of array: "); scanf("%d", &n); int arr[n]; for (int i = 0; i < n; i++) { printf("Enter a number: "); scanf("%d", &arr[i]); } //sort for (int j = 0; j < n - 1; j++) { for (int k = j + 1; k < n; k++) { if (arr[j] >= arr[k]) { arr[j] = arr[j] ^ arr[k]; arr[k] = arr[j] ^ arr[k]; arr[j] = arr[j] ^ arr[k]; } } } // count int num = 1; // If you don't want to include the repeated number itself, replace all "num = 1" with "num = 0" for (int j = 0; j < n - 1; j++) { if (arr[j] == arr[j + 1]) num++; else { printf("The num %d repeats %d times\n", arr[j], num); // You can delete this line count += num; num = 1; //Initialize num to avoid repeated accumulation of num and prepare to enter the next loop } } printf("Total repeats: %d\n", count); return 0; }
over 4 years ago · Santiago Trujillo Denunciar

0

Para evitar contar en exceso, deberá realizar un seguimiento de los números que ya se han repetido. Solo tendría una segunda matriz para guardar valores "ya repetidos":

 #include <stdio.h> int main() { int n, p = 0, r = 0; printf("Enter the size of the array: "); scanf(" %u",&n); int arr[n]; int rep[n - 1]; for (int i = 0; i < n; i++) { printf("Enter arr[%d]: ",i); scanf(" %d",&arr[i]); } for (int i = 0; i < n; i++) { int count = 1, j; for (j = 0; j < r; j++) { if (arr[i] == rep[j]) break; } if (j < r) continue; for (j = i + 1; j < n; j++) if (arr[i] == arr[j]) count++; if (count > 1) { p = p + count; rep[r++] = arr[i]; } } printf("Number of repitions is %d\n",p); }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda