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.

Matriz en espiral, estoy obteniendo elementos extra al imprimir el orden de la matriz en espiral. ¿No sé por qué?

// imprimir en orden espiral de la matriz
#include
using namespace std;

int main(){
    int n,m;
    cin>>n>>m;
    int arr[n][m];
    for(int i=0; i>arr[i][j];
        }
    }
    // imprimir
    for(int i=0; i=col_start; j--){
            cout<=row_start; i--){
            cout<

Mi salida es:

PS C:\Users\anmol\Desktop\c++projectwork> ./a
3 4 
1 2 3 4 5 6 7 8 9 0 1 2
1 2 3 4 
5 6 7 8 
9 0 1 2
1 2 3 4 8 2 1 0 9 5 6 7 6

Estoy obteniendo un extra ‘6’ al final.
lo cual no es necesario, sin embargo, este tipo de problema solo ocurre cuando la matriz es rectangular.
Pero el código funciona bien para una matriz cuadrada.
Por favor, dime dónde me equivoqué..

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que asume que la matriz es un cuadrado perfecto (el mismo número de filas y columnas), pero cuando la matriz es rectangular (diferente número de filas y columnas), la lógica de impresión en espiral no funciona correctamente.

    Para solucionar este problema, necesitamos agregar verificaciones adicionales en el bucle while para manejar matrices rectangulares. Podemos agregar una condición para verificar si row_start sigue siendo menor o igual a row_end y col_start sigue siendo menor o igual a col_end antes de ingresar a cada bucle for.

    Aquí está el código actualizado con las verificaciones adicionales:

    “`c++
    #include
    using namespace std;

    int main(){
    int n,m;
    cin>>n>>m;
    int arr[n][m];
    for(int i=0; i<n; i++){=”” for(int=”” j=”0;”></n;><m; j++){=”” cin=””>>arr[i][j];
    }
    }
    // imprimir
    for(int i=0; i<n; i++){=”” for(int=”” j=”0;”></n;><m; j++){=””></m;><arr[i][j]<<” “;=”” }=””></arr[i][j]<<“><endl; }=”” impresión=”” en=”” espiral=”” int=”” row_start=”0,row_end=n-1,col_start=0,col_end=m-1;” while(row_start<=”row_end” &&=”” col_start<=”col_end){” imprimir=”” la=”” primera=”” fila=”” de=”” las=”” filas=”” restantes=”” for(int=”” j=”col_start;” j<=”col_end” &&=”” row_start<=”row_end;” j++){=””></endl;><arr[row_start][j]<<” “;=”” }=”” row_start++;=”” imprimir=”” la=”” última=”” columna=”” de=”” las=”” columnas=”” restantes=”” for(int=”” i=”row_start;” i<=”row_end” &&=”” col_start<=”col_end;” i++){=””></arr[row_start][j]<<“><arr[i][col_end]<<” “;=”” }=”” col_end–;=”” imprimir=”” la=”” última=”” fila=”” de=”” las=”” filas=”” restantes=”” for(int=”” j=”col_end;” j=””>=col_start && row_start<=row_end; j–){
    cout<<arr[row_end][j]<<” “;=”” }=”” row_end–;=”” imprimir=”” la=”” primera=”” columna=”” de=”” las=”” columnas=”” restantes=”” for(int=”” i=”row_end;” i=””>=row_start && col_start<=col_end; i–){
    cout<<arr[i][col_start]<<” “;
    }
    col_start++;
    }
    return 0;
    }


    al agregar las verificaciones adicionales en cada bucle for, el código puede imprimir la matriz en orden espiral correctamente incluso para matrices rectangulares. ";="" }="" col_start++;="" }="" return="" 0;="" }="" ```="" al="" agregar="" las="" verificaciones="" adicionales="" en="" cada="" bucle="" for,="" el="" código="" puede="" imprimir="" la="" matriz="" en="" orden="" espiral="" correctamente="" incluso="" para="" matrices=""></arr[i][col_start]<<" "; } col_start++; } return 0; }

    al agregar las verificaciones adicionales en cada bucle for, el código puede imprimir la matriz en orden espiral correctamente incluso para matrices rectangulares.></arr[row_end][j]<<“></arr[i][col_end]<<“></m;>

Comments are closed.