Print concentric rectangular pattern in a 2d matrix

22 Nov, 2021
Given a positive integer n, print the matrix filled with rectangle pattern as shown below: a a a a a a b b b a a b c b a a b b b a a a a a a where a = n, b = n – 1,c = n – 2 and so on.
Examples: 
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 = 3
Output :
3 3 3 3 3 
3 2 2 2 3 
3 2 1 2 3 
3 2 2 2 3 
3 3 3 3 3 
For the given n, the number of rows or columns to be printed will be 2*n – 1. We will print the matrix in two parts. We will first print upper half from rows from 0 to floor((2*n – 1)/2) and then second half from floor((2*n – 1)/2) + 1 to 2*n – 2. Now for each row, we will print it in three parts. First part is decreasing sequence which will start from n and decrease by 1 in each iteration. The number of iteration will be equal to row number, the second part is a constant sequence where constant is n – i and it will be print 2*n – 1 – 2 * row number, and the third part is increasing sequence which is nothing but opposite of the first sequence. For lower half, observe, it is a mirror image of upper half (excluding middle row). So, simply run a loop of the upper half from (2*n – 1)/2 to 0.
Below is the basic implementation of this approach: 
C++
Java
Python3
C#
PHP
Javascript
// C++ program for printing// the rectangular pattern#include <bits/stdc++.h>using namespace std; // Function to print the patternvoid printPattern(int n){    // number of rows and columns to be printed    int s = 2 * n - 1;     // Upper Half    for (int i = 0; i < (s / 2) + 1; i++) {                int m = n;         // Decreasing part        for (int j = 0; j < i; j++) {            cout << m << " ";            m--;        }         // Constant Part        for (int k = 0; k < s - 2 * i; k++) {            cout << n - i << " ";        }         // Increasing part.        m = n - i + 1;        for (int l = 0; l < i; l++) {            cout << m << " ";            m++;        }         cout << endl;    }     // Lower Half    for (int i = s / 2 - 1; i >= 0; i--) {         // Decreasing Part        int m = n;        for (int j = 0; j < i; j++) {            cout << m << " ";            m--;        }         // Constant Part.        for (int k = 0; k < s - 2 * i; k++) {            cout << n - i << " ";        }         // Decreasing Part        m = n - i + 1;        for (int l = 0; l < i; l++) {            cout << m << " ";            m++;        }        cout << endl;    }}// Driven Programint main(){    int n = 3;     printPattern(n);    return 0;}
// Java program for printing// the rectangular patternimport java.io.*; class GFG{ // Function to// print the patternstatic void printPattern(int n){    // number of rows and    // columns to be printed    int s = 2 * n - 1;     // Upper Half    for (int i = 0;             i < (s / 2) + 1; i++)    {        int m = n;         // Decreasing part        for (int j = 0; j < i; j++)        {            System.out.print(m + " ");            m--;        }         // Constant Part        for (int k = 0;                 k < s - 2 * i; k++)        {            System.out.print(n - i + " ");        }         // Increasing part.        m = n - i + 1;        for (int l = 0; l < i; l++)        {            System.out.print(m + " ");            m++;        }         System.out.println();    }     // Lower Half    for (int i = s / 2 - 1;             i >= 0; i--)    {         // Decreasing Part        int m = n;        for (int j = 0; j < i; j++)        {            System.out.print(m + " ");            m--;        }         // Constant Part.        for (int k = 0;                 k < s - 2 * i; k++)        {            System.out.print(n - i + " ");        }         // Decreasing Part        m = n - i + 1;        for (int l = 0; l < i; l++)        {            System.out.print(m + " ");            m++;        }        System.out.println();    }}// Driver Codepublic static void main (String[] args){    int n = 3;     printPattern(n);}} // This code is contributed// by anuj_67.
# Python3 program for printing# the rectangular pattern # Function to print the patterndef printPattern(n) :     # number of rows and columns to be printed    s = 2 * n - 1     # Upper Half    for i in range(0, int(s / 2) + 1):                 m = n         # Decreasing part        for j in range(0, i):            print(m ,end= " " )            m-=1                 # Constant Part        for k in range(0, s - 2 * i):            print(n-i ,end= " " )                 # Increasing part.        m = n - i + 1        for l in range(0, i):            print(m ,end= " " )            m+=1                 print("")         # Lower Half    for i in range(int(s / 2),-1,-1):         # Decreasing Part        m = n        for j in range(0, i):            print(m ,end= " " )            m-=1                  # Constant Part.        for k in range(0, s - 2 * i):            print(n-i ,end= " " )                  # Decreasing Part        m = n - i + 1        for l in range(0, i):            print(m ,end= " " )            m+=1                 print("")     # Driven Programif __name__=='__main__':    n = 3    printPattern(n) # this code is contributed by Smitha Dinesh# Semwal
// C# program for printing// the rectangular patternusing System; class GFG{ // Function to// print the patternstatic void printPattern(int n){    // number of rows and    // columns to be printed    int s = 2 * n - 1;     // Upper Half    for (int i = 0;             i < (s / 2) + 1; i++)    {        int m = n;         // Decreasing part        for (int j = 0; j < i; j++)        {            Console.Write(m + " ");            m--;        }         // Constant Part        for (int k = 0;                 k < s - 2 * i; k++)        {            Console.Write(n - i + " ");        }         // Increasing part.        m = n - i + 1;        for (int l = 0; l < i; l++)        {            Console.Write(m + " ");            m++;        }         Console.WriteLine();    }     // Lower Half    for (int i = s / 2 - 1;             i >= 0; i--)    {         // Decreasing Part        int m = n;        for (int j = 0; j < i; j++)        {            Console.Write(m + " ");            m--;        }         // Constant Part.        for (int k = 0;                 k < s - 2 * i; k++)        {            Console.Write(n - i + " ");        }         // Decreasing Part        m = n - i + 1;        for (int l = 0; l < i; l++)        {            Console.Write(m + " ");            m++;        }        Console.WriteLine();    }}// Driver Codepublic static void Main (){    int n = 3;     printPattern(n);}} // This code is contributed// by anuj_67.
<?php// PHP program for printing// the rectangular pattern // Function to print the patternfunction printPattern($n){    // number of rows and columns    // to be printed    $s = 2 * $n - 1;     // Upper Half    for ($i = 0;         $i < (int)($s / 2) + 1; $i++)    {                 $m = $n;         // Decreasing part        for ($j = 0; $j < $i; $j++)        {            echo $m , " ";            $m--;        }         // Constant Part        for ($k = 0; $k < $s - 2 * $i; $k++)        {            echo ($n - $i) , " ";        }         // Increasing part.        $m = $n - $i + 1;        for ($l = 0; $l < $i; $l++)        {            echo $m , " ";            $m++;        }         echo "\n";    }     // Lower Half    for ($i = (int)($s / 2 - 1);         $i >= 0; $i--)    {         // Decreasing Part        $m = $n;        for ($j = 0; $j < $i; $j++)        {            echo $m, " ";            $m--;        }         // Constant Part.        for ($k = 0; $k < $s - 2 * $i; $k++)        {            echo $n - $i , " ";        }         // Decreasing Part        $m = $n - $i + 1;        for ($l = 0; $l < $i; $l++)        {            echo $m , " ";            $m++;        }        echo "\n";    }} // Driver Code$n = 3;printPattern($n); // This code is contributed// by Sach_Code   ?>
<script> // Javascript program for printing// the rectangular pattern // Function to// print the patternfunction printPattern(n){    // number of rows and    // columns to be printed    let s = 2 * n - 1;       // Upper Half    for (let i = 0;             i < Math.floor(s / 2) + 1; i++)    {        let m = n;           // Decreasing part        for (let j = 0; j < i; j++)        {            document.write(m + " ");            m--;        }           // Constant Part        for (let k = 0;                 k < s - 2 * i; k++)        {            document.write(n - i + " ");        }           // Increasing part.        m = n - i + 1;        for (let l = 0; l < i; l++)        {            document.write(m + " ");            m++;        }           document.write("<br/>");    }       // Lower Half    for (let i = Math.floor(s / 2) - 1;             i >= 0; i--)    {           // Decreasing Part        let m = n;        for (let j = 0; j < i; j++)        {            document.write(m + " ");            m--;        }           // Constant Part.        for (let k = 0;                 k < s - 2 * i; k++)        {            document.write(n - i + " ");        }           // Decreasing Part        m = n - i + 1;        for (let l = 0; l < i; l++)        {            document.write(m + " ");            m++;        }        document.write("<br/>");    }} // Driver Code       let n = 3;       printPattern(n);     </script>
Output  
3 3 3 3 3 
3 2 2 2 3 
3 2 1 2 3 
3 2 2 2 3 
3 3 3 3 3  
Another Approach:  
C++
Java
Python3
C#
PHP
Javascript
// C++ program for printing// the rectangular pattern#include<bits/stdc++.h>using namespace std; // Function to print the patternvoid printPattern(int n){    int arraySize = n * 2 - 1;    int result[arraySize][arraySize];             // Fill the values    for(int i = 0; i < arraySize; i++)    {        for(int j = 0; j < arraySize; j++)        {            if(abs(i - arraySize / 2) > abs(j - arraySize / 2))                result[i][j] = abs(i - arraySize / 2) + 1;            else                result[i][j] = (abs(j-arraySize / 2) + 1);                     }    }             // Print the array    for(int i = 0; i < arraySize; i++)    {        for(int j = 0; j < arraySize; j++)        {            cout << result[i][j] << " ";        }        cout << endl;    }} // Driver Codeint main(){    int n = 3;     printPattern(n);    return 0;} // This code is contributed// by Rajput-Ji.
// Java program for printing// the rectangular patternimport java.io.*; class GFG{ // Function to print the patternstatic void printPattern(int n){        int arraySize = n * 2 - 1;        int[][] result = new int[arraySize][arraySize];                 //Fill the values        for(int i = 0; i < arraySize; i++)        {            for(int j = 0; j < arraySize; j++)            {                result[i][j] = Math.max(Math.abs(i-arraySize/2),                                    Math.abs(j-arraySize/2))+1;            }        }                 //Print the array        for(int i = 0; i < arraySize; i++)        {            for(int j = 0; j < arraySize; j++)            {            System.out.print(result[i][j]);            }            System.out.println();        }}// Driver Codepublic static void main (String[] args){    int n = 3;     printPattern(n);}} // This code is contributed// by MohitSharma23.
# Python3 program for printing# the rectangular pattern # Function to print the patterndef printPattern(n):     arraySize = n * 2 - 1;    result = [[0 for x in range(arraySize)]                 for y in range(arraySize)];             # Fill the values    for i in range(arraySize):        for j in range(arraySize):            if(abs(i - (arraySize // 2)) >               abs(j - (arraySize // 2))):                result[i][j] = abs(i - (arraySize // 2)) + 1;            else:                result[i][j] = abs(j - (arraySize // 2)) + 1;                 # Print the array    for i in range(arraySize):        for j in range(arraySize):            print(result[i][j], end = " ");        print(""); # Driver Coden = 3; printPattern(n); # This code is contributed by mits
// C# program for printing// the rectangular patternusing System; class GFG{ // Function to print the patternstatic void printPattern(int n){        int arraySize = n * 2 - 1;        int[,] result = new int[arraySize,arraySize];                 // Fill the values        for(int i = 0; i < arraySize; i++)        {            for(int j = 0; j < arraySize; j++)            {                result[i,j] = Math.Max(Math.Abs(i-arraySize/2),                                    Math.Abs(j-arraySize/2))+1;            }        }                 // Print the array        for(int i = 0; i < arraySize; i++)        {            for(int j = 0; j < arraySize; j++)            {                Console.Write(result[i,j]+" ");            }            Console.WriteLine();        }} // Driver Codepublic static void Main (String[] args){    int n = 3;     printPattern(n);}} // This code has been contributed by 29AjayKumar
<?php// PHP program for printing// the rectangular pattern // Function to print the patternfunction printPattern($n){    $arraySize = $n * 2 - 1;    $result=array_fill(0,$arraySize,array_fill(0,$arraySize,0));             // Fill the values    for($i = 0; $i < $arraySize; $i++)    {        for($j = 0; $j < $arraySize; $j++)        {            if(abs($i - (int)($arraySize / 2)) >                    abs($j - (int)($arraySize / 2)))                $result[$i][$j] = abs($i -                        (int)($arraySize / 2)) + 1;            else                $result[$i][$j] = (abs($j-(int)                                ($arraySize / 2)) + 1);                     }    }             // Print the array    for($i = 0; $i < $arraySize; $i++)    {        for($j = 0; $j < $arraySize; $j++)        {            echo $result[$i][$j]." ";        }        echo "\n";    }} // Driver Code     $n = 3;     printPattern($n); // This code is contributed by mits?>
<script>    // Javascript program for printing the rectangular pattern         // Function to print the pattern    function printPattern(n)    {            let arraySize = n * 2 - 1;            let result = new Array(arraySize);             // Fill the values            for(let i = 0; i < arraySize; i++)            {                result[i] = new Array(arraySize);                for(let j = 0; j < arraySize; j++)                {                    result[i][j] = Math.max(Math.abs(i-parseInt(arraySize/2, 10)),                                        Math.abs(j-parseInt(arraySize/2, 10)))+1;                }            }             // Print the array            for(let i = 0; i < arraySize; i++)            {                for(let j = 0; j < arraySize; j++)                {                    document.write(result[i][j] + " ");                }                  document.write("</br>");            }    }         let n = 3;      printPattern(n); // This code is contributed by divyeshrabadiya07.</script>
Output  
3 3 3 3 3 
3 2 2 2 3 
3 2 1 2 3 
3 2 2 2 3 
3 3 3 3 3  
 
vt_m
Smitha Dinesh Semwal
Sach_Code
MohitSharma23
Rajput-Ji
29AjayKumar
Mithun Kumar
avijitmondal1998
divyeshrabadiya07
arorakashish0911
pattern-printing
Matrix
pattern-printing
Matrix
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Unique paths in a Grid with Obstacles
Find median in row wise sorted matrix
Traverse a given Matrix using Recursion
Zigzag (or diagonal) traversal of Matrix
A Boolean Matrix Question
Common elements in all rows of a given matrix
Find a specific pair in Matrix
Python program to add two Matrices
Flood fill Algorithm - how to implement fill() in paint?
Find shortest safe route in a path with landmines