Open In App

Print concentric rectangular pattern in a 2d matrix

Last Updated : 21 Dec, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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++
// C++ program for printing
// the rectangular pattern
#include <bits/stdc++.h>
using namespace std;

// Function to print the pattern
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++) {
            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 Program
int main()
{
    int n = 3;

    printPattern(n);
    return 0;
}
Java
// Java program for printing
// the rectangular pattern
import java.io.*;

class GFG 
{

// Function to 
// print the pattern
static 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 Code
public static void main (String[] args) 
{
    int n = 3;

    printPattern(n);
}
}

// This code is contributed 
// by anuj_67.
Python3
# Python3 program for printing 
# the rectangular pattern 

# Function to print the pattern 
def printPattern(n) :

    # number of rows and columns to be printed 
    s = 2 * n - 1

    # Upper Half 
    for i in range(0, int(s / 2)): 
        
        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 Program 
if __name__=='__main__':
    n = 3
    printPattern(n) 

# this code is contributed by Smitha Dinesh 
# Semwal
C#
// C# program for printing
// the rectangular pattern
using System;

class GFG 
{

// Function to 
// print the pattern
static 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 Code
public static void Main () 
{
    int n = 3;

    printPattern(n);
}
}

// This code is contributed 
// by anuj_67.
PHP
<?php
// PHP program for printing 
// the rectangular pattern 

// Function to print the pattern 
function 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    
?>
JavaScript
<script>

// Javascript program for printing
// the rectangular pattern

// Function to 
// print the pattern
function 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 

Complexity Analysis:

  • Time Complexity: O(n2)
  • Auxiliary Space: O(1)

Another Approach: 

C++
// C++ program for printing
// the rectangular pattern
#include<bits/stdc++.h>
using namespace std;

// Function to print the pattern
void 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 Code
int main()
{
    int n = 3;

    printPattern(n);
    return 0;
}

// This code is contributed 
// by Rajput-Ji.
Java
// Java program for printing
// the rectangular pattern
import java.io.*;

class GFG 
{

// Function to print the pattern
static 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 Code
public static void main (String[] args) 
{
    int n = 3;

    printPattern(n);
}
}

// This code is contributed 
// by MohitSharma23.
Python3
# Python3 program for printing
# the rectangular pattern

# Function to print the pattern
def 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 Code
n = 3;

printPattern(n);

# This code is contributed by mits
C#
// C# program for printing 
// the rectangular pattern 
using System; 

class GFG 
{ 

// Function to print the pattern 
static 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 Code 
public static void Main (String[] args) 
{ 
    int n = 3; 

    printPattern(n); 
} 
} 

// This code has been contributed by 29AjayKumar
PHP
<?php
// PHP program for printing
// the rectangular pattern

// Function to print the pattern
function 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
?>
JavaScript
<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 

Complexity Analysis:

  • Time Complexity: O(n2)
  • Auxiliary Space: O(n2) 

Next Article
Article Tags :
Practice Tags :

Similar Reads