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:
// CPP program to print given number of 1's, // 2's, 3's ....k's in zig-zag way. #include <bits/stdc++.h> using namespace std;
// function that prints given number of 1's, // 2's, 3's ....k's in zig-zag way. void ZigZag( int rows, int columns, int numbers[])
{ int k = 0;
// two-dimensional array to store numbers.
int arr[rows][columns];
for ( int i=0; i<rows; i++)
{
// for even row.
if (i%2==0)
{
// for each column.
for ( int j=0; j<columns and
numbers[k]>0; j++)
{
// storing element.
arr[i][j] = k+1;
// decrement element at
// kth index.
numbers[k]--;
// if array contains zero
// then increment index to
// make this next index
if (numbers[k] == 0)
k++;
}
}
// for odd row.
else
{
// for each column.
for ( int j=columns-1; j>=0 and
numbers[k]>0; j--)
{
// storing element.
arr[i][j] = k+1;
// decrement element
// at kth index.
numbers[k]--;
// if array contains zero then
// increment index to make this
// next index.
if (numbers[k]==0)
k++;
}
}
}
// printing the stored elements.
for ( int i=0;i<rows;i++)
{
for ( int j=0;j<columns;j++)
cout << arr[i][j] << " " ;
cout << endl;
}
} // Driver code for above function. int main()
{ int rows = 4;
int columns = 5;
int Numbers[] = {3, 4, 2, 2, 3, 1, 5};
ZigZag(rows, columns, Numbers);
return 0;
} |
// C program to print given number of 1's, // 2's, 3's ....k's in zig-zag way. #include <stdio.h> // function that prints given number of 1's, // 2's, 3's ....k's in zig-zag way. void ZigZag( int rows, int columns, int numbers[])
{ int k = 0;
// two-dimensional array to store numbers.
int arr[rows][columns];
for ( int i=0; i<rows; i++)
{
// for even row.
if (i%2==0)
{
// for each column.
for ( int j=0; j<columns && numbers[k]>0; j++)
{
// storing element.
arr[i][j] = k+1;
// decrement element at
// kth index.
numbers[k]--;
// if array contains zero
// then increment index to
// make this next index
if (numbers[k] == 0)
k++;
}
}
// for odd row.
else
{
// for each column.
for ( int j=columns-1; j>=0 && numbers[k]>0; j--)
{
// storing element.
arr[i][j] = k+1;
// decrement element
// at kth index.
numbers[k]--;
// if array contains zero then
// increment index to make this
// next index.
if (numbers[k]==0)
k++;
}
}
}
// printing the stored elements.
for ( int i=0;i<rows;i++)
{
for ( int j=0;j<columns;j++)
printf ( "%d " ,arr[i][j]);
printf ( "\n" );
}
} // Driver code for above function. int main()
{ int rows = 4;
int columns = 5;
int Numbers[] = {3, 4, 2, 2, 3, 1, 5};
ZigZag(rows, columns, Numbers);
return 0;
} // This code is contributed by kothavvsaakash. |
// Java program to print given // number of 1's, 2's, 3's ....k's // in zig-zag way. import java.util.*;
import java.lang.*;
public class GfG{
// function that prints given number of 1's,
// 2's, 3's ....k's in zig-zag way.
public static void ZigZag( int rows,
int columns,
int numbers[])
{
int k = 0 ;
// two-dimensional array to store numbers.
int [][] arr = new int [rows][columns];
for ( int i= 0 ; i<rows; i++)
{
// for even row.
if (i% 2 == 0 )
{
// for each column.
for ( int j= 0 ; j<columns &&
numbers[k]> 0 ; j++)
{
// storing element.
arr[i][j] = k+ 1 ;
// decrement element at
// kth index.
numbers[k]--;
// if array contains zero
// then increment index to
// make this next index
if (numbers[k] == 0 )
k++;
}
}
// for odd row.
else
{
// for each column.
for ( int j=columns- 1 ; j>= 0 &&
numbers[k]> 0 ; j--)
{
// storing element.
arr[i][j] = k+ 1 ;
// decrement element
// at kth index.
numbers[k]--;
// if array contains zero then
// increment index to make this
// next index.
if (numbers[k]== 0 )
k++;
}
}
}
// printing the stored elements.
for ( int i= 0 ;i<rows;i++)
{
for ( int j= 0 ;j<columns;j++)
System.out.print(arr[i][j] + " " );
System.out.println();
}
}
// Driver function
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);
}
} /* This code is contributed by Sagar Shukla */ |
# Python3 program to print given number of 1's, # 2's, 3's ....k's in zig-zag way. # function that prints given number of 1's, # 2's, 3's ....k's in zig-zag way. def ZigZag(rows, columns, numbers):
k = 0
# two-dimensional array to store numbers.
arr = [[ 0 for i in range (columns)] for j in range (rows)]
for i in range (rows):
# for even row.
if (i % 2 = = 0 ):
# for each column.
j = 0
while j < columns and numbers[k] > 0 :
# storing element.
arr[i][j] = k + 1
# decrement element at
# kth index.
numbers[k] - = 1 # if array contains zero
# then increment index to
# make this next index
if numbers[k] = = 0 :
k + = 1
j + = 1
# for odd row.
else :
# for each column.
j = columns - 1
while j> = 0 and numbers[k]> 0 :
# storing element.
arr[i][j] = k + 1
# decrement element
# at kth index.
numbers[k] - = 1
# if array contains zero then
# increment index to make this
# next index.
if numbers[k] = = 0 :
k + = 1
j - = 1
# printing the stored elements.
for i in arr:
for j in i:
print (j, end = " " )
print ()
# Driver code rows = 4 ;
columns = 5 ;
Numbers = [ 3 , 4 , 2 , 2 , 3 , 1 , 5 ]
ZigZag(rows, columns, Numbers) # This code is contributed by # Rajnis09 |
// C# program to print given // number of 1's, 2's, 3's ....k's // in zig-zag way. using System;
public class GfG{
// function that prints given number of 1's,
// 2's, 3's ....k's in zig-zag way.
public static void ZigZag( int rows,
int columns,
int []numbers)
{
int k = 0;
// two-dimensional array to store numbers.
int [,] arr = new int [rows,columns];
for ( int i = 0; i < rows; i++)
{
// for even row.
if (i % 2 == 0)
{
// for each column.
for ( int j = 0; j < columns &&
numbers[k] > 0; j++)
{
// storing element.
arr[i,j] = k + 1;
// decrement element at
// kth index.
numbers[k]--;
// if array contains zero
// then increment index to
// make this next index
if (numbers[k] == 0)
k++;
}
}
// for odd row.
else
{
// for each column.
for ( int j = columns - 1; j >= 0 &&
numbers[k] > 0; j--)
{
// storing element.
arr[i,j] = k + 1;
// decrement element
// at kth index.
numbers[k]--;
// if array contains zero then
// increment index to make this
// next index.
if (numbers[k] == 0)
k++;
}
}
}
// printing the stored elements.
for ( int i = 0;i < rows; i++)
{
for ( int j = 0; j < columns; j++)
Console.Write(arr[i, j] + " " );
Console.WriteLine();
}
}
// Driver function
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);
}
} /* This code is contributed by vt_m*/ |
<?php // PHP program to print given number of 1's, // 2's, 3's ....k's in zig-zag way. // function that prints given number of 1's, // 2's, 3's ....k's in zig-zag way. function ZigZag( $rows , $columns , $numbers )
{ $k = 0;
// two-dimensional array
// to store numbers.
$arr = array ( array ());
for ( $i = 0; $i < $rows ; $i ++)
{
// for even row.
if ( $i % 2==0)
{
// for each column.
for ( $j = 0; $j < $columns and
$numbers [ $k ] > 0; $j ++)
{
// storing element.
$arr [ $i ][ $j ] = $k + 1;
// decrement element at
// kth index.
$numbers [ $k ]--;
// if array contains zero
// then increment index to
// make this next index
if ( $numbers [ $k ] == 0)
$k ++;
}
}
// for odd row.
else
{
// for each column.
for ( $j = $columns - 1; $j >= 0 and
$numbers [ $k ] > 0; $j --)
{
// storing element.
$arr [ $i ][ $j ] = $k + 1;
// decrement element
// at kth index.
$numbers [ $k ]--;
// if array contains zero then
// increment index to make this
// next index.
if ( $numbers [ $k ]==0)
$k ++;
}
}
}
// printing the stored elements.
for ( $i = 0; $i < $rows ; $i ++)
{
for ( $j = 0; $j < $columns ; $j ++)
echo $arr [ $i ][ $j ] , " " ;
echo "\n" ;
}
} // Driver Code
$rows = 4;
$columns = 5;
$Numbers = array (3, 4, 2, 2, 3, 1, 5);
ZigZag( $rows , $columns , $Numbers );
// This code is contributed by anuj_67. ?> |
<script> // JavaScript program to print given
// number of 1's, 2's, 3's ....k's
// in zig-zag way.
// function that prints given number of 1's,
// 2's, 3's ....k's in zig-zag way.
function ZigZag(rows, columns, numbers)
{
let k = 0;
// two-dimensional array to store numbers.
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++)
{
// for even row.
if (i%2==0)
{
// for each column.
for (let j=0; j<columns &&
numbers[k]>0; j++)
{
// storing element.
arr[i][j] = k+1;
// decrement element at
// kth index.
numbers[k]--;
// if array contains zero
// then increment index to
// make this next index
if (numbers[k] == 0)
k++;
}
}
// for odd row.
else
{
// for each column.
for (let j=columns-1; j>=0 &&
numbers[k]>0; j--)
{
// storing element.
arr[i][j] = k+1;
// decrement element
// at kth index.
numbers[k]--;
// if array contains zero then
// increment index to make this
// next index.
if (numbers[k]==0)
k++;
}
}
}
// printing the stored elements.
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> |
1 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.