¿Cómo aprender a imprimir patrones fácilmente?

La tarea es imprimir un patrón como se muestra en el ejemplo para un valor entero dado.
El objetivo no es imprimir solo este patrón, es aprender el mejor enfoque para resolver este tipo de problemas, ya que estas preguntas se hacen con frecuencia en los exámenes de codificación y en las entrevistas de trabajo.
Ejemplos: 
 

Input: N = 4
Output:
4 4 4 4 4 4 4
4 3 3 3 3 3 4
4 3 2 2 2 3 4
4 3 2 1 2 3 4
4 3 2 2 2 3 4
4 3 3 3 3 3 4
4 4 4 4 4 4 4

Input: N = 7
Output:
7 7 7 7 7 7 7 7 7 7 7 7 7
7 6 6 6 6 6 6 6 6 6 6 6 7
7 6 5 5 5 5 5 5 5 5 5 6 7
7 6 5 4 4 4 4 4 4 4 5 6 7
7 6 5 4 3 3 3 3 3 4 5 6 7
7 6 5 4 3 2 2 2 3 4 5 6 7
7 6 5 4 3 2 1 2 3 4 5 6 7
7 6 5 4 3 2 2 2 3 4 5 6 7
7 6 5 4 3 3 3 3 3 4 5 6 7
7 6 5 4 4 4 4 4 4 4 5 6 7
7 6 5 5 5 5 5 5 5 5 5 6 7
7 6 6 6 6 6 6 6 6 6 6 6 7
7 7 7 7 7 7 7 7 7 7 7 7 7

Para el tutorial, se utiliza un ejemplo de N = 4
 

  • Paso 1: en primer lugar, analice el patrón en busca de ejes de simetría. Aquí nuestro patrón es simétrico tanto vertical como horizontalmente, así que dibuja las líneas de simetría así,
     

analyse the pattern for any lines of symmetry

  • Después de dividir el patrón en partes, primero intente dibujar solo la parte superior izquierda, es decir, la parte A. Si no hay ninguna línea de simetría, salte al paso 2.
  • Paso 2: ahora asocie cada celda, es decir, elemento con un número de fila y columna (generalmente indicado por i y j, respectivamente) Al igual que, 
     

 associate each cell

  • De ahora en adelante, una celda se denota por C(i, j) con su fila y columna no.
  • Paso 3: En este paso, intenta encontrar una relación entre el valor de C(i, j) con i y/o j. Por lo general, el valor de C depende del valor de N y de los valores de i y j entre sí. Para elaborar,
    – En la primera fila, todos los elementos son iguales, es decir, 4 (= N). Así que no es de mucha ayuda. 
    – En la segunda fila, se puede ver que C disminuye de 4 a 3 para i>=j y luego permanece en 3 para el siguiente i=j y luego permanece en 2 para el siguiente i=j para todos los valores de j, se puede ver C disminuyendo de 4 a 1.
    Entonces, en cada fila, C comienza desde N, disminuye en 1 hasta i>=j, y luego se vuelve constante. Aquí el valor de C depende del menor entre i y j y la fórmula podría ser: 
     
C(i, j) = N - min(i, j) + 1
  • Así que nuestro enfoque debería ser: 
     

C++

#include <iostream>
using namespace std;
  
int main()
{
    int N = 4, i, j, min;
    cout << "Value of N: " << N << endl;
  
    for (i = 1; i <= N; i++) {
        for (j = 1; j <= N; j++) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        cout << endl;
    }
    return 0;
}

Java

// Java program to find triplets 
// a[i]>a[j]>a[k] and i<j<k
import java.util.*;
  
class GFG
{
  
// Driver code
public static void main(String[] args)
{
    int N = 4, i, j, min;
    System.out.println("Value of N: " + N);
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            System.out.print(N - min + 1);
        }
        System.out.println();
    }
}
}
  
// This code is contributed by Princi Singh

Python3

# Python3 program to find triplets 
# a[i]>a[j]>a[k] and i<j<k
if __name__ == '__main__':
      
    N = 4;
    print("Value of N: ", N);
  
    for i in range(1, N + 1):
        for j in range(1, N + 1):
            min = i if i < j else j;
            print(N - min + 1, end = "");
        print();
  
# This code is contributed 
# by PrinciRaj1992 

C#

// C# program to find triplets 
// a[i]>a[j]>a[k] and i<j<k
using System;
      
class GFG
{
  
// Driver code
public static void Main(String[] args)
{
    int N = 4, i, j, min;
    Console.WriteLine("Value of N: " + N);
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            Console.Write(N - min + 1);
        }
        Console.WriteLine();
    }
}
}
  
// This code is contributed by PrinciRaj1992

Javascript

<script>
  
// JavaScript program to find triplets 
// a[i]>a[j]>a[k] and i<j<k
  
// Driver code
    var N = 4, i, j, min;
    document.write("Value of N: " + N +"<br>");
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            document.write(N - min + 1);
        }
        document.write("<br>");
    }
  
// This code is contributed by shivanisinghss2110
  
</script>
  •  
Producción: 

Value of N: 4
4444
4333
4322
4321

 

  • Si el patrón no tenía simetría y ahora está completo, el trabajo está hecho. Pero para patrones con simetría, todavía están incompletos y se requiere ir al paso 4. 
     
  • Paso 4: ahora incluya la parte B del patrón en la imagen y asocie esos elementos con los números de columna. Pero no asigne números de columna en serie; en su lugar, asígneles el mismo número de columna que se asignó a su columna espejo en la parte A.
     

  •  
  • Paso 5: ahora cambie el código para agregar la parte B. Para hacer eso, solo es necesario volver a ejecutar el ciclo interno para j = n-1 a j=1. 
     

C++

#include <iostream>
using namespace std;
  
int main()
{
    int N = 4, i, j, min;
    cout << "Value of N: " << N << endl;
  
    for (i = 1; i <= N; i++) {
        for (j = 1; j <= N; j++) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        for (j = N - 1; j >= 1; j--) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        cout << endl;
    }
    return 0;
}

Java

class GFG 
{
    public static void main(String[] args) 
    {
        int N = 4, i, j, min;
        System.out.println("Value of N: " + N);
      
        for (i = 1; i <= N; i++) 
        {
            for (j = 1; j <= N; j++) 
            {
                min = i < j ? i : j;
                System.out.print(N - min + 1);
            }
            for (j = N - 1; j >= 1; j--)
            {
                min = i < j ? i : j;
                System.out.print(N - min + 1);
            }
            System.out.println();
        }
    }
}
  
// This code is contributed by PrinciRaj1992

Python3

N = 4;
print("Value of N: ", N);
  
for i in range(1, N + 1):
    for j in range(1, N + 1):
        min = i if i < j else j;
        print(N - min + 1, end = "");
  
    for j in range(N - 1, 0, -1):
        min = i if i < j else j;
        print(N - min + 1, end = "");
    print();
  
# This code is contributed by Rajput-Ji

C#

using System;
  
class GFG 
{
    public static void Main(String[] args) 
    {
        int N = 4, i, j, min;
        Console.WriteLine("Value of N: " + N);
      
        for (i = 1; i <= N; i++) 
        {
            for (j = 1; j <= N; j++) 
            {
                min = i < j ? i : j;
                Console.Write(N - min + 1);
            }
            for (j = N - 1; j >= 1; j--)
            {
                min = i < j ? i : j;
                Console.Write(N - min + 1);
            }
            Console.WriteLine();
        }
    }
}
  
// This code is contributed by Rajput-Ji

Javascript

<script>
 var N = 4, i, j, min;
        document.write("Value of N: " + N +"<br>");
      
        for (i = 1; i <= N; i++) 
        {
            for (j = 1; j <= N; j++) 
            {
                min = i < j ? i : j;
                document.write(N - min + 1);
            }
            for (j = N - 1; j >= 1; j--)
            {
                min = i < j ? i : j;
                document.write(N - min + 1);
            }
            document.write("<br>");
        }
  
  
// this code is contributed by shivanisinghss2110
</script>
  •  
Producción: 

Value of N: 4
4444444
4333334
4322234
4321234

 

  •  
  • Paso 6: ahora incluya las partes C y D del patrón en la imagen y asocie esos elementos con números de fila de la misma manera que se asignan los números de columna en el paso 4.
     

  •  
  • Paso 7: Ahora, de la misma manera, como se hizo en el paso 5, cambie el código para agregar las partes C y D. Para hacer eso, solo necesita volver a ejecutar el ciclo externo para i = n-1 a i=1. 
     

C++

#include <iostream>
using namespace std;
  
int main()
{
    int N = 4, i, j, min;
    cout << "Value of N: " << N << endl;
  
    for (i = 1; i <= N; i++) {
        for (j = 1; j <= N; j++) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        for (j = N - 1; j >= 1; j--) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        cout << endl;
    }
    for (i = N - 1; i >= 1; i--) {
        for (j = 1; j <= N; j++) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        for (j = N - 1; j >= 1; j--) {
            min = i < j ? i : j;
            cout << N - min + 1;
        }
        cout << endl;
    }
    return 0;
}

Java

// Java implementation of the approach
class GFG 
{
public static void main(String[] args) 
{
    int N = 4, i, j, min;
    System.out.println("Value of N: " + N);
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++)
        {
            min = i < j ? i : j;
            System.out.print(N - min + 1);
        }
        for (j = N - 1; j >= 1; j--)
        {
            min = i < j ? i : j;
            System.out.print(N - min + 1);
        }
        System.out.println();
    }
      
    for (i = N - 1; i >= 1; i--) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            System.out.print(N - min + 1);
        }
        for (j = N - 1; j >= 1; j--) 
        {
            min = i < j ? i : j;
            System.out.print(N - min + 1);
        }
        System.out.println();
    }
    }
}
  
// This code is contributed by 29AjayKumar

Python3

# Python3 implementation of the approach
N = 4
print("Value of N: ", N) 
  
for i in range(1, N + 1): 
    for j in range(1, N + 1): 
        min = i if i < j else j 
        print(N - min + 1, end = " ") 
  
    for j in range(N - 1, 0, -1): 
        min = i if i < j else j 
        print(N - min + 1, end = " ")
  
    print()
      
for i in range(N - 1, 0, -1): 
    for j in range(1, N + 1): 
        min = i if i < j else j 
        print(N - min + 1, end = " ") 
  
    for j in range(N - 1, 0, -1): 
        min = i if i < j else j 
        print(N - min + 1, end = " ")
  
    print()
      
# This code is contributed by sai prakash

C#

// C# implementation of the approach
using System;
  
class GFG 
{
public static void Main(String[] args) 
{
    int N = 4, i, j, min;
    Console.WriteLine("Value of N: " + N);
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++)
        {
            min = i < j ? i : j;
            Console.Write(N - min + 1);
        }
        for (j = N - 1; j >= 1; j--)
        {
            min = i < j ? i : j;
            Console.Write(N - min + 1);
        }
        Console.WriteLine();
    }
      
    for (i = N - 1; i >= 1; i--) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            Console.Write(N - min + 1);
        }
        for (j = N - 1; j >= 1; j--) 
        {
            min = i < j ? i : j;
            Console.Write(N - min + 1);
        }
        Console.WriteLine();
    }
    }
}
  
// This code is contributed by Rajput-Ji

Javascript

<script>
  
// JavaScript implementation of the approach
  
    var N = 4, i, j, min;
    document.write("Value of N: " + N +"<br>");
  
    for (i = 1; i <= N; i++) 
    {
        for (j = 1; j <= N; j++)
        {
            min = i < j ? i : j;
            document.write(N - min + 1 );
        }
        for (j = N - 1; j >= 1; j--)
        {
            min = i < j ? i : j;
            document.write(N - min + 1);
        }
        document.write("<br>");
    }
      
    for (i = N - 1; i >= 1; i--) 
    {
        for (j = 1; j <= N; j++) 
        {
            min = i < j ? i : j;
            document.write(N - min + 1);
        }
        for (j = N - 1; j >= 1; j--) 
        {
            min = i < j ? i : j;
            document.write(N - min + 1);
        }
        document.write("<br>");
    }
  
// This code is contributed by shivanisinghss2110
</script>
Producción: 

Value of N: 4
4444444
4333334
4322234
4321234
4322234
4333334
4444444

 

  •  

     

Publicación traducida automáticamente

Artículo escrito por Parresh77 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 *