Construya una array cuadrada usando dígitos del número dado N según el patrón dado

Dado un entero N , la tarea es construir una array mat[][] de tamaño M x M (‘M’ es el número de dígitos en el entero dado) tal que cada diagonal de la array contenga el mismo dígito, colocado de acuerdo con la posición de los dígitos en el número entero dado y luego repita los pasos desde atrás.

Ejemplos:

Entrada: N = 123
Salida: {{1, 2, 3}, 
               {2, 3, 2}, 
               {3, 2, 1}}
Explicación: La array deseada debe tener un tamaño de 3*3. Los dígitos de N son 1, 2 y 3. Colocando 1, 2 y 3 a lo largo de las diagonales desde la celda superior izquierda hasta la diagonal N, y 2, 1 justo después de la diagonal N hasta la celda más inferior.

Entrada: N = 3219
Salida: {{3, 2, 1, 9}, {2, 1, 9, 1}, {1, 9, 1, 2}, {9, 1, 2, 3}}

 

Enfoque: La tarea se puede resolver recorriendo la array en forma diagonal y asignando los valores de celda de acuerdo con el dígito correspondiente en el número dado.

  1. Extraiga y almacene los dígitos del entero dado en un vector, digamos v .
  2. Nuevamente almacene los dígitos en orden inverso para la segunda mitad de la diagonal de la array.
  3. Asigne los dígitos en el orden deseado.
  4. Imprime la array.

A continuación se muestra la implementación del enfoque anterior: 

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to construct the matrix
void constructMatrix(int n)
{
    // Vector to store the
    // digits of the integer
    vector<int> v;
 
    // Extracting the digits
    // from the integer
    while (n > 0) {
        v.push_back(n % 10);
        n = n / 10;
    }
 
    // Reverse the vector
    reverse(v.begin(), v.end());
 
    // Size of the vector
    int N = v.size();
 
    // Loop to store the digits in
    // reverse order in the same vector
    for (int i = N - 2; i >= 0; i--) {
        v.push_back(v[i]);
    }
 
    // Matrix to be constructed
    int mat[N][N];
 
    // Assign the digits and
    // print the desired matrix
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            mat[i][j] = v[i + j];
            cout << mat[i][j] << " ";
        }
        cout << endl;
    }
}
 
// Driver Code
int main()
{
    int n = 3219;
 
    // Passing n to constructMatrix function
    constructMatrix(n);
 
    return 0;
}

Java

// Java program for the above approach
 
import java.util.ArrayList;
import java.util.Collections;
 
class GFG {
 
    // Function to construct the matrix
    public static void constructMatrix(int n)
    {
       
        // Vector to store the
        // digits of the integer
        ArrayList<Integer> v = new ArrayList<Integer>();
 
        // Extracting the digits
        // from the integer
        while (n > 0) {
            v.add(n % 10);
            n = n / 10;
        }
 
        // Reverse the vector
        Collections.reverse(v);
 
        // Size of the vector
        int N = v.size();
 
        // Loop to store the digits in
        // reverse order in the same vector
        for (int i = N - 2; i >= 0; i--) {
            v.add(v.get(i));
        }
 
        // Matrix to be constructed
        int[][] mat = new int[N][N];
 
        // Assign the digits and
        // print the desired matrix
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                mat[i][j] = v.get(i + j);
                System.out.print(mat[i][j] + " ");
            }
            System.out.println("");
        }
    }
 
    // Driver Code
    public static void main(String args[]) {
        int n = 3219;
 
        // Passing n to constructMatrix function
        constructMatrix(n);
    }
}
 
// This code is contributed by gfgking.

Python3

# python program for the above approach
 
# Function to construct the matrix
def constructMatrix(n):
 
    # Vector to store the
    # digits of the integer
    v = []
 
    # Extracting the digits
    # from the integer
    while (n > 0):
        v.append(n % 10)
        n = n // 10
 
    # Reverse the vector
    v.reverse()
 
    # Size of the vector
    N = len(v)
 
    # Loop to store the digits in
    # reverse order in the same vector
    for i in range(N-2, -1, -1):
        v.append(v[i])
 
    # Matrix to be constructed
    mat = [[0 for _ in range(N)] for _ in range(N)]
 
    # Assign the digits and
    # print the desired matrix
    for i in range(0, N):
        for j in range(0, N):
            mat[i][j] = v[i + j]
            print(mat[i][j], end=" ")
 
        print()
 
# Driver Code
if __name__ == "__main__":
    n = 3219
 
    # Passing n to constructMatrix function
    constructMatrix(n)
 
# This code is contributed by rakeshsahni

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
class GFG{
 
// Function to construct the matrix
static void constructMatrix(int n)
{
   
    // Vector to store the
    // digits of the integer
    List<int> v = new List<int>();
 
    // Extracting the digits
    // from the integer
    while (n > 0) {
        v.Add(n % 10);
        n = n / 10;
    }
 
    // Reverse the vector
    v.Reverse();
 
    // Size of the vector
    int N = v.Count;
 
    // Loop to store the digits in
    // reverse order in the same vector
    for (int i = N - 2; i >= 0; i--) {
        v.Add(v[i]);
    }
 
    // Matrix to be constructed
    int[,] mat = new int[N, N];
 
    // Assign the digits and
    // print the desired matrix
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++) {
            mat[i, j] = v[i + j];
            Console.Write(mat[i, j] + " ");
        }
        Console.WriteLine();
    }
}
 
 
// Driver Code
public static void Main()
{
    int n = 3219;
 
    // Passing n to constructMatrix function
    constructMatrix(n);
}
}
 
// This code is contributed by sanjoy_62.

Javascript

<script>
       // JavaScript Program to implement
       // the above approach
 
       // Function to construct the matrix
       function constructMatrix(n)
       {
        
           // Vector to store the
           // digits of the integer
           let v = [];
 
           // Extracting the digits
           // from the integer
           while (n > 0) {
               v.push(n % 10);
               n = Math.floor(n / 10);
           }
 
           // Reverse the vector
           v.reverse();
 
           // Size of the vector
           let N = v.length;
 
           // Loop to store the digits in
           // reverse order in the same vector
           for (let i = N - 2; i >= 0; i--) {
               v.push(v[i]);
           }
 
           // Matrix to be constructed
           let mat = new Array(N);
           for (let i = 0; i < mat.length; i++) {
               mat[i] = new Array(N).fill(0);
           }
 
           // Assign the digits and
           // print the desired matrix
           for (let i = 0; i < N; i++) {
               for (let j = 0; j < N; j++) {
                   mat[i][j] = v[i + j];
                   document.write(mat[i][j] + " ");
               }
               document.write("<br>")
           }
       }
 
       // Driver Code
       let n = 3219;
 
       // Passing n to constructMatrix function
       constructMatrix(n);
 
   // This code is contributed by Potta Lokesh
   </script>
Producción: 

3 2 1 9 
2 1 9 1 
1 9 1 2 
9 1 2 3

 

Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por samim2000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *