Una matriz de enteros matriz[50][50], contiene valores en el rango 1..25. Se pide construir una función void ocurre(int *,int *, int) que rellene una matriz de enteros n_veces[5][5] con las ocurrencias de cada valor en matriz. Ej: (Por razones de espacio, matriz ha sido reducida a 5x5 y el rango 1..9, por lo que la dimensión de n_veces es 3x3)1 5 2 9 8 4 2 27 2 5 7 5 <--> 1 4 21 6 1 6 8 4 3 34 9 9 3 73 8 7 1 5n_veces[0][0] contiene un 4 dado que el dígito 1 aparece cuatro veces en matriz;n_veces[0][1] contiene un 2 dado que el dígito 2 aparece dos veces en matriz;..n_veces[1][0] contiene un 1 dado que el dígito 4 aparece una vez en matriz;Se resolverá sin utlizar vectores ni matrices auxiliaresLa solución deberá ser optimizada para obtener la máxima puntuación.
#include <stdio.h>#include <stdlib.h>void ocurre(int *f,int *d, int tope){ int n, valor; for(n=0;n<tope*tope;n++) { valor=*(f+n); (*(d+valor-1))++; }}main(){ srand(time(NULL)); int vector[50][50]; int ocurrencias[5][5]; int f,c; for(f=0;f<50;f++) for(c=0;c<50;c++) vector[f][c]=1+rand()%25; // Valores de 1 a 25 for(f=0;f<5;f++) for(c=0;c<5;c++) ocurrencias[f][c]=0; // Poner a cero matriz ocurrencias ocurre(&vector[0][0],&ocurrencias[0][0],50);}
23 14 12 4 411 2 7 5 1318 2 7 21 1515 10 16 9 2521 7 17 7 140:7,1:14,2:4,3:2,4:21,5:15,6:23,7:12,8:11,9:5,4 2 22 2 21 1 1Presione una tecla para continuar . . .
Deberías construir un vector con el número de elementos que necesites, en este caso 25, que son las veinticinco posibilidades. A continuación recorres la matriz entera, y al array[valor_matriz] le sumas 1.
Es cierto, no lo lei entero. Pero no hay mucha diferencia. Vas sumando 1 en la matrriz final para cada ocurrencia y listo.