Given number of rows and columns. And given number of 1’s, 2’s, 3’s ……k’s which needs to be printed. Print them in a zig-zag way.
It is guaranteed that n*m = number of 1’s + 2’s + 3’s + …… + k’s
Examples:
Input : 2 3
2 1 2 1
Output : 1 1 2
4 3 3
Explanation :
Here number of rows are 2 and number of columns are 3
and number of 1's are 2
number of 2's are 1
number of 3's are 2
number of 4's are 1
-----------
| 1 | 1 | 2 |
| 3 | 3 | 4 |
-----------
Input : 4 3
2 4 3 1 2
Output : 1 1 2
2 2 2
3 3 3
5 5 4
Explanation :
Here number of rows are 4 and number of columns are 3
and number of 1's are 2
number of 2's are 4 [Note that 2s are printed in]
number of 3's are 3 [zig zag manner]
number of 4's are 1
number of 5's are 2
Approach: We make a two-dimensional array to store all the elements in zig-zag way. we will traverse through all the elements of an array of numbers and insert all the numbers of an array of i-th index into a two-dimensional array until it becomes zero.
Implementation:
C++
#include <bits/stdc++.h>
using namespace std;
void ZigZag( int rows, int columns, int numbers[])
{
int k = 0;
int arr[rows][columns];
for ( int i=0; i<rows; i++)
{
if (i%2==0)
{
for ( int j=0; j<columns and
numbers[k]>0; j++)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k] == 0)
k++;
}
}
else
{
for ( int j=columns-1; j>=0 and
numbers[k]>0; j--)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k]==0)
k++;
}
}
}
for ( int i=0;i<rows;i++)
{
for ( int j=0;j<columns;j++)
cout << arr[i][j] << " " ;
cout << endl;
}
}
int main()
{
int rows = 4;
int columns = 5;
int Numbers[] = {3, 4, 2, 2, 3, 1, 5};
ZigZag(rows, columns, Numbers);
return 0;
}
|
C
#include <stdio.h>
void ZigZag( int rows, int columns, int numbers[])
{
int k = 0;
int arr[rows][columns];
for ( int i=0; i<rows; i++)
{
if (i%2==0)
{
for ( int j=0; j<columns && numbers[k]>0; j++)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k] == 0)
k++;
}
}
else
{
for ( int j=columns-1; j>=0 && numbers[k]>0; j--)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k]==0)
k++;
}
}
}
for ( int i=0;i<rows;i++)
{
for ( int j=0;j<columns;j++)
printf ( "%d " ,arr[i][j]);
printf ( "\n" );
}
}
int main()
{
int rows = 4;
int columns = 5;
int Numbers[] = {3, 4, 2, 2, 3, 1, 5};
ZigZag(rows, columns, Numbers);
return 0;
}
|
Java
import java.util.*;
import java.lang.*;
public class GfG{
public static void ZigZag( int rows,
int columns,
int numbers[])
{
int k = 0 ;
int [][] arr = new int [rows][columns];
for ( int i= 0 ; i<rows; i++)
{
if (i% 2 == 0 )
{
for ( int j= 0 ; j<columns &&
numbers[k]> 0 ; j++)
{
arr[i][j] = k+ 1 ;
numbers[k]--;
if (numbers[k] == 0 )
k++;
}
}
else
{
for ( int j=columns- 1 ; j>= 0 &&
numbers[k]> 0 ; j--)
{
arr[i][j] = k+ 1 ;
numbers[k]--;
if (numbers[k]== 0 )
k++;
}
}
}
for ( int i= 0 ;i<rows;i++)
{
for ( int j= 0 ;j<columns;j++)
System.out.print(arr[i][j] + " " );
System.out.println();
}
}
public static void main(String argc[])
{
int rows = 4 ;
int columns = 5 ;
int [] Numbers = new int []{ 3 , 4 , 2 ,
2 , 3 , 1 , 5 };
ZigZag(rows, columns, Numbers);
}
}
|
Python 3
def ZigZag(rows, columns, numbers):
k = 0
arr = [[ 0 for i in range (columns)] for j in range (rows)]
for i in range (rows):
if (i % 2 = = 0 ):
j = 0
while j < columns and numbers[k] > 0 :
arr[i][j] = k + 1
numbers[k] - = 1
if numbers[k] = = 0 :
k + = 1
j + = 1
else :
j = columns - 1
while j> = 0 and numbers[k]> 0 :
arr[i][j] = k + 1
numbers[k] - = 1
if numbers[k] = = 0 :
k + = 1
j - = 1
for i in arr:
for j in i:
print (j, end = " " )
print ()
rows = 4 ;
columns = 5 ;
Numbers = [ 3 , 4 , 2 , 2 , 3 , 1 , 5 ]
ZigZag(rows, columns, Numbers)
|
C#
using System;
public class GfG{
public static void ZigZag( int rows,
int columns,
int []numbers)
{
int k = 0;
int [,] arr = new int [rows,columns];
for ( int i = 0; i < rows; i++)
{
if (i % 2 == 0)
{
for ( int j = 0; j < columns &&
numbers[k] > 0; j++)
{
arr[i,j] = k + 1;
numbers[k]--;
if (numbers[k] == 0)
k++;
}
}
else
{
for ( int j = columns - 1; j >= 0 &&
numbers[k] > 0; j--)
{
arr[i,j] = k + 1;
numbers[k]--;
if (numbers[k] == 0)
k++;
}
}
}
for ( int i = 0;i < rows; i++)
{
for ( int j = 0; j < columns; j++)
Console.Write(arr[i, j] + " " );
Console.WriteLine();
}
}
public static void Main()
{
int rows = 4;
int columns = 5;
int []Numbers = new int []{3, 4, 2,
2, 3, 1, 5};
ZigZag(rows, columns, Numbers);
}
}
|
PHP
<?php
function ZigZag( $rows , $columns , $numbers )
{
$k = 0;
$arr = array ( array ());
for ( $i = 0; $i < $rows ; $i ++)
{
if ( $i % 2==0)
{
for ( $j = 0; $j < $columns and
$numbers [ $k ] > 0; $j ++)
{
$arr [ $i ][ $j ] = $k + 1;
$numbers [ $k ]--;
if ( $numbers [ $k ] == 0)
$k ++;
}
}
else
{
for ( $j = $columns - 1; $j >= 0 and
$numbers [ $k ] > 0; $j --)
{
$arr [ $i ][ $j ] = $k + 1;
$numbers [ $k ]--;
if ( $numbers [ $k ]==0)
$k ++;
}
}
}
for ( $i = 0; $i < $rows ; $i ++)
{
for ( $j = 0; $j < $columns ; $j ++)
echo $arr [ $i ][ $j ] , " " ;
echo "\n" ;
}
}
$rows = 4;
$columns = 5;
$Numbers = array (3, 4, 2, 2, 3, 1, 5);
ZigZag( $rows , $columns , $Numbers );
?>
|
Javascript
<script>
function ZigZag(rows, columns, numbers)
{
let k = 0;
let arr = new Array(rows);
for (let i=0; i<rows; i++)
{
arr[i] = new Array(rows);
for (let j=0; j < columns; j++)
{
arr[i][j] = 0;
}
}
for (let i=0; i<rows; i++)
{
if (i%2==0)
{
for (let j=0; j<columns &&
numbers[k]>0; j++)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k] == 0)
k++;
}
}
else
{
for (let j=columns-1; j>=0 &&
numbers[k]>0; j--)
{
arr[i][j] = k+1;
numbers[k]--;
if (numbers[k]==0)
k++;
}
}
}
for (let i=0;i<rows;i++)
{
for (let j=0;j<columns;j++)
document.write(arr[i][j] + " " );
document.write( "</br>" );
}
}
let rows = 4;
let columns = 5;
let Numbers = [3, 4, 2, 2, 3, 1, 5];
ZigZag(rows, columns, Numbers);
</script>
|
Output1 1 1 2 2
4 3 3 2 2
4 5 5 5 6
7 7 7 7 7
Time Complexity: O(N*M), as we are using nested loops for traversing the matrix.
Auxiliary Space: O(N*M), as we are using extra space.