Print concentric rectangular pattern in a 2d matrix
Last Updated :
21 Dec, 2022
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>
Output3 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>
Output3 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)
Similar Reads
Print rectangular pattern with given center Given 3 positive integer c1, c2 and n, where n is size of 2-D square matrix. The task is to print the matrix filled with rectangular pattern having center coordinates c1, c2 such that 0 <= c1, c2 < n. Examples: Input: c1 = 2, c2 = 2, n = 5Output:2 2 2 2 2 2 1 1 1 2 2 1 0 1 2 2 1 1 1 2 2 2 2 2
4 min read
Pattern to print X in a rectangular box Given the value of length, print the X pattern in a box using # and " " Examples: Input : 10 Output : ########## ## ## # # # # # # # # # ## # # ## # # # # # # # # # ## ## ########## Input : 7 Output : ####### ## ## # # # # # # # # # # # ## ## ####### Below is the implementation to print X in a recta
4 min read
Print lower triangular matrix pattern from given array Given an array, print the array in 2D form where upper triangle has values 0 and lower triangle has values increasing prefix sizes (First row has prefix of size 1, second row has prefix of size 2, ..)Examples : Input : 1 2 3 4 5 Output : 1 0 0 0 0 1 2 0 0 0 1 2 3 0 0 1 2 3 4 0 1 2 3 4 5 Input : 1 2
6 min read
Print matrix in diagonal pattern Given a matrix of n*n size, the task is to print its elements in a diagonal pattern. Input : mat[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} Output : 1 2 4 7 5 3 6 8 9. Explanation: Start from 1 Then from upward to downward diagonally i.e. 2 and 4 Then from downward to upward diagonally i.e 7, 5, 3 Th
14 min read
Print matrix in snake pattern Given an n x n matrix. In the given matrix, you have to print the elements of the matrix in the snake pattern.Examples : Input: mat[][] = { {10, 20, 30, 40}, {15, 25, 35, 45}, {27, 29, 37, 48}, {32, 33, 39, 50}};Output: 10 20 30 40 45 35 25 15 27 29 37 48 50 39 33 32 Input: mat[][] = [[1, 2], [3, 4]
4 min read
Print numbers in matrix diagonal pattern Given an integer N, the task is to print the given pattern. Examples: Input: 3 Output: 1 2 4 3 5 7 6 8 9 Input: 4 Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 16 Approach: Create a matrix of size N X N which will store the pattern before printing.Store the elements in the upper triangle of the patter
7 min read
Print matrix in snake pattern from the last column Given a matrix of 2-Dimensional array of n rows and n columns. Print this matrix in snake fashion starting from column n-1 as shown in the figure below . Examples: Input : mat[][] = 1 2 3 4 5 6 7 8 9 Output: 3 2 1 4 5 6 9 8 7 Input: mat[][] = 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Output: 4 3 2 1 5
6 min read
Javascript Program to Print matrix in snake pattern Given n x n matrix In the given matrix, you have to print the elements of the matrix in the snake pattern.Examples: Input :mat[][] = { {10, 20, 30, 40}, {15, 25, 35, 45}, {27, 29, 37, 48}, {32, 33, 39, 50}}; Output : 10 20 30 40 45 35 25 15 27 29 37 48 50 39 33 32 Input :mat[][] = { {1, 2, 3}, {4, 5
2 min read
Printing string in plus â+â pattern in the matrix Given a string, print it inside a matrix in such a way that a 'plus' is formed. Examples: Input: TOP Output: X T X T O P X P X Input: FEVER Output: X X F X X X X E X X F E V E R X X E X X X X R X X Approach: The idea is simple. First we can access every element of the matrix and make it âXâ. Then we
10 min read
POTD Solutions | 8 Novâ 23 | Print Matrix in snake Pattern View all POTD Solutions Welcome to the daily solutions of our PROBLEM OF THE DAY (POTD). We will discuss the entire problem step-by-step and work towards developing an optimized solution. This will not only help you brush up on your concepts of Matrix but will also help you build up problem-solving
4 min read