marcelogarberoglio / PI

Para realizar consultas
4 stars 0 forks source link

Ej 1 Parcial1 29/09/2022 #192

Open za0sec opened 1 year ago

za0sec commented 1 year ago

Hola Marcelo, paso para correccion del ejercicio. Como esta de eficiencia? Tal vez tengo un for de mas. El ejercicio pedia lo siguiente:

Escribir una función que reciba una matriz cuadrada de dimensión N (N es una constante previamente definida) y retorne 1 si la misma cumple con las siguientes condiciones: 1) Contiene todos los números de 1 a N * N inclusive 2) En cada fila contiene números consecutivos, no necesariamente ordenados

int requirments(int mat[][N]){

  int vecAp[N*N] = {0};

  for(int i=0; i<N; i++){

    for (int j=0; j<N; j++){

      vecAp[mat[i][j]-1] = 1;

    }

    int sum=0;

    for (int t=0; t<(N*(i+1)); t++)
      sum += vecAp[t];

    if (sum != (N*(i+1)))
      return 0;

  }

   return 1;

}
marcelogarberoglio commented 1 year ago

No estás haciendo lo que pide el ejercicio. Y esto de marcar todo y después volver a recorrer creo que ya mencioné que está lejos de ser la mejor opción.

za0sec commented 1 year ago

Perdon Marcelo, pero no comprendo porque no hago lo que pide el ejercicio. En cuanto a recorrer otra vez el vector de apariciones, es cierto, estoy buscando una manera de sacarlo.

marcelogarberoglio commented 1 year ago

¿En qué momento verificás que en la primer fila están los números entre 1 y N? ¿Y en la segunda entre N+1 y 2N? Lean bien los enunciados, incluídos los ejemplos.

za0sec commented 1 year ago

Lo pense poniendo un vector de apariciones y al final de cada iteracion de i, comprobar si la suma de esos da N. Digamos que si en la primer fila no estan los numeros del 1 al 4, la suma daria 3 por ende no estan los 4 numeros. Lo mismo para cuando i este en la segunda fila, la suma tiene que valer 4. De esta manera, no estoy verificando ambas cosas a la vez? Tal vez no tiene sentido lo que hago pero en mi cabeza sonaba logico. Igualmente ahi corregi para que ese for, se siga haciendo desde (i*N).

int requirments(int mat[][N]){

  int vecAp[N*N] = {0};

  for(int i=0; i<N; i++){

    for (int j=0; j<N; j++){

      vecAp[mat[i][j]-1] = 1;

    }

    int sum=0;

    for (int t=i*N; t<(N*(i+1)); t++)
      sum += vecAp[t];

    if (sum != N)
      return 0;

  }

   return 1;

}
marcelogarberoglio commented 1 year ago

pero estás accediendo a vecAp sin validar el valor de mat[i][j]