es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo verificar si hay múltiples 1 en cualquier diagonal de una matriz?

Tengo una tarea en la que debo verificar si hay múltiples 1 en alguna diagonal de una matriz de 8×8.

Por ejemplo, si esta es la matriz:

0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 1 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 0 1 0 0 0 0 0

La salida debería ser “No”, porque no hay una diagonal con múltiples 1.

Pero para esto:

0 0 0 0 0 1 0 0
0 0 0 1 0 0 0 0
0 0 1 0 0 0 1 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1
0 1 0 0 0 0 0 0
0 0 0 0 1 0 1 0
0 0 1 0 0 0 0 0

La salida debería ser “Sí”, ya que tiene dos números 1 en una diagonal. No logro entender cómo hacer que verifique las diagonales.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para verificar si hay múltiples 1 en cualquier diagonal de la matriz, una forma es iterar a través de cada diagonal y verificar si hay múltiples 1.

    Aquí hay un enfoque en código C:

    #include <stdio.h>
    
    int main()
    {
        int matrix[8][8] = {{0, 0, 0, 0, 0, 1, 0, 0},
                            {0, 0, 0, 1, 0, 0, 0, 0},
                            {0, 0, 0, 0, 0, 0, 1, 0},
                            {1, 0, 0, 0, 0, 0, 0, 0},
                            {0, 0, 0, 0, 0, 0, 0, 1},
                            {0, 1, 0, 0, 0, 0, 0, 0},
                            {0, 0, 0, 0, 1, 0, 0, 0},
                            {0, 0, 1, 0, 0, 0, 0, 0}};
    
        int i, j, count;
        // verificación de las diagonales desde (0,0) hasta (7,7)
        for (i = 0; i < 8; i++) {
            count = 0;
            for (j = 0; j < 8-i; j++) {
                if (matrix[i+j][j] == 1) {
                    count++;
                    if (count > 1) {
                        printf("Sí\n");
                        return 0;
                    }
                }
            }
        }
        // verificación de las diagonales desde (1,0) hasta (7,6)
        for (j = 0; j < 7; j++) {
            count = 0;
            for (i = 0; i < 8-j; i++) {
                if (matrix[i][j+i] == 1) {
                    count++;
                    if (count > 1) {
                        printf("Sí\n");
                        return 0;
                    }
                }
            }
        }
        // verificación de las diagonales desde (0,1) hasta (6,7)
        for (i = 1; i < 8; i++) {
            count = 0;
            for (j = 0; j < 8-i; j++) {
                if (matrix[j][i+j] == 1) {
                    count++;
                    if (count > 1) {
                        printf("Sí\n");
                        return 0;
                    }
                }
            }
        }
        // verificación de las diagonales desde (0,7) hasta (6,1)
        for (i = 0; i < 7; i++) {
            count = 0;
            for (j = 0; j < 8-i-1; j++) {
                if (matrix[i+j+1][7-j] == 1) {
                    count++;
                    if (count > 1) {
                        printf("Sí\n");
                        return 0;
                    }
                }
            }
        }
        printf("No\n");
        return 0;
    }
    

    El código primero establece la matriz y luego itera a través de cada diagonal en la matriz para verificar si hay múltiples 1.

    Para verificar la diagonal que comienza en (0,0) hasta (7,7), iteramos a través de las filas y columnas comenzando desde (0,0) e incrementando ambos índices en 1 hasta que lleguemos al final de la matriz. Para verificar la diagonal que comienza en (1,0) hasta (7,6), empezamos en (1,0) e incrementamos ambos índices hasta que lleguemos al final. De manera similar, verificamos las diagonales que comienzan en (0,1) hasta (6,7) y (0,7) hasta (6,1).

    Para cada diagonal, llevamos cuenta del número de 1 que encontramos, y si la cuenta supera 1, mostramos “Sí” y salimos del programa. Si terminamos de verificar todas las diagonales y no hemos encontrado una diagonal con múltiples 1, mostramos “No”.</stdio.h>

Comments are closed.