创建一个具有O和X交替矩形的矩阵

编写一个代码,输入两个数字m和n,并创建一个大小为m x n(m行和n列)的矩阵,其中每个元素都是x或0。X和0必须交替填充,矩阵应该有最外面的X矩形,然后是0矩形,然后是X矩形,依此类推。

null

例如:

Input: m = 3, n = 3Output: Following matrix X X XX 0 XX X XInput: m = 4, n = 5Output: Following matrixX X X X XX 0 0 0 XX 0 0 0 XX X X X XInput:  m = 5, n = 5Output: Following matrixX X X X XX 0 0 0 XX 0 X 0 XX 0 0 0 XX X X X XInput:  m = 6, n = 7Output: Following matrixX X X X X X XX 0 0 0 0 0 XX 0 X X X 0 XX 0 X X X 0 XX 0 0 0 0 0 XX X X X X X X 

我们强烈建议尽量减少浏览器,并先自己尝试。 这个问题是在什里帕特纳·古尔冈的校园招聘中提出的。我遵循以下方法。 1) 使用 螺旋形打印矩阵的代码 . 2) 在数组中交替插入元素“X”或“0”,而不是打印数组。

以下是上述方法的实现。

C++

#include <bits/stdc++.h>
using namespace std;
// Function to print alternating rectangles of 0 and X
void fill0X( int m, int n)
{
/*  k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator    */
int i, k = 0, l = 0;
// Store given number of rows and columns for later use
int r = m, c = n;
// A 2D array to store the output to be printed
char a[m][n];
char x = 'X' ; // Initialize the character to be stored in a[][]
// Fill characters in a[][] in spiral form. Every iteration fills
// one rectangle of either Xs or Os
while (k < m && l < n)
{
/* Fill the first row from the remaining rows */
for (i = l; i < n; ++i)
a[k][i] = x;
k++;
/* Fill the last column from the remaining columns */
for (i = k; i < m; ++i)
a[i][n-1] = x;
n--;
/* Fill the last row from the remaining rows */
if (k < m)
{
for (i = n-1; i >= l; --i)
a[m-1][i] = x;
m--;
}
/* Print the first column from the remaining columns */
if (l < n)
{
for (i = m-1; i >= k; --i)
a[i][l] = x;
l++;
}
// Flip character for next iteration
x = (x == '0' )? 'X' : '0' ;
}
// Print the filled matrix
for (i = 0; i < r; i++)
{
for ( int j = 0; j < c; j++)
cout << " " << a[i][j];
cout << "" ;
}
}
/* Driver program to test above functions */
int main()
{
puts ( "Output for m = 5, n = 6" );
fill0X(5, 6);
puts ( "Output for m = 4, n = 4" );
fill0X(4, 4);
puts ( "Output for m = 3, n = 4" );
fill0X(3, 4);
return 0;
}
// This code is contributed by shivanisinghss2110


C

#include <stdio.h>
// Function to print alternating rectangles of 0 and X
void fill0X( int m, int n)
{
/*  k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator    */
int i, k = 0, l = 0;
// Store given number of rows and columns for later use
int r = m, c = n;
// A 2D array to store the output to be printed
char a[m][n];
char x = 'X' ; // Initialize the character to be stored in a[][]
// Fill characters in a[][] in spiral form. Every iteration fills
// one rectangle of either Xs or Os
while (k < m && l < n)
{
/* Fill the first row from the remaining rows */
for (i = l; i < n; ++i)
a[k][i] = x;
k++;
/* Fill the last column from the remaining columns */
for (i = k; i < m; ++i)
a[i][n-1] = x;
n--;
/* Fill the last row from the remaining rows */
if (k < m)
{
for (i = n-1; i >= l; --i)
a[m-1][i] = x;
m--;
}
/* Print the first column from the remaining columns */
if (l < n)
{
for (i = m-1; i >= k; --i)
a[i][l] = x;
l++;
}
// Flip character for next iteration
x = (x == '0' )? 'X' : '0' ;
}
// Print the filled matrix
for (i = 0; i < r; i++)
{
for ( int j = 0; j < c; j++)
printf ( "%c " , a[i][j]);
printf ( "" );
}
}
/* Driver program to test above functions */
int main()
{
puts ( "Output for m = 5, n = 6" );
fill0X(5, 6);
puts ( "Output for m = 4, n = 4" );
fill0X(4, 4);
puts ( "Output for m = 3, n = 4" );
fill0X(3, 4);
return 0;
}


JAVA

// Java code to demonstrate the working.
import java.io.*;
class GFG {
// Function to print alternating
// rectangles of 0 and X
static void fill0X( int m, int n)
{
/* k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator */
int i, k = 0 , l = 0 ;
// Store given number of rows
// and columns for later use
int r = m, c = n;
// A 2D array to store
// the output to be printed
char a[][] = new char [m][n];
// Initialize the character
// to be stored in a[][]
char x = 'X' ;
// Fill characters in a[][] in spiral
// form. Every iteration fills
// one rectangle of either Xs or Os
while (k < m && l < n)
{
/* Fill the first row from the remaining rows */
for (i = l; i < n; ++i)
a[k][i] = x;
k++;
/* Fill the last column from the remaining columns */
for (i = k; i < m; ++i)
a[i][n- 1 ] = x;
n--;
/* Fill the last row from the remaining rows */
if (k < m)
{
for (i = n- 1 ; i >= l; --i)
a[m- 1 ][i] = x;
m--;
}
/* Print the first column
// from the remaining columns */
if (l < n)
{
for (i = m- 1 ; i >= k; --i)
a[i][l] = x;
l++;
}
// Flip character for next iteration
x = (x == '0' )? 'X' : '0' ;
}
// Print the filled matrix
for (i = 0 ; i < r; i++)
{
for ( int j = 0 ; j < c; j++)
System.out.print(a[i][j] + " " );
System.out.println();
}
}
/* Driver program to test above functions */
public static void main (String[] args) {
System.out.println( "Output for m = 5, n = 6" );
fill0X( 5 , 6 );
System.out.println( "Output for m = 4, n = 4" );
fill0X( 4 , 4 );
System.out.println( "Output for m = 3, n = 4" );
fill0X( 3 , 4 );
}
}
// This code  is contributed by vt_m


Python3

# Python3 program to Create a matrix with
# alternating rectangles of O and X
# Function to print alternating rectangles
# of 0 and X
def fill0X(m, n):
# k - starting row index
# m - ending row index
# l - starting column index
# n - ending column index
# i - iterator
i, k, l = 0 , 0 , 0
# Store given number of rows and
# columns for later use
r = m
c = n
# A 2D array to store the output
# to be printed
a = [[ None ] * n for i in range (m)]
x = 'X' # Initialize the character to
# be stored in a[][]
# Fill characters in a[][] in spiral form.
# Every iteration fills one rectangle of
# either Xs or Os
while k < m and l < n:
# Fill the first row from the
# remaining rows
for i in range (l, n):
a[k][i] = x
k + = 1
# Fill the last column from
# the remaining columns
for i in range (k, m):
a[i][n - 1 ] = x
n - = 1
# Fill the last row from the
# remaining rows
if k < m:
for i in range (n - 1 , l - 1 , - 1 ):
a[m - 1 ][i] = x
m - = 1
# Print the first column from
# the remaining columns
if l < n:
for i in range (m - 1 , k - 1 , - 1 ):
a[i][l] = x
l + = 1
# Flip character for next iteration
x = 'X' if x = = '0' else '0'
# Print the filled matrix
for i in range (r):
for j in range (c):
print (a[i][j], end = " " )
print ()
# Driver Code
if __name__ = = '__main__' :
print ( "Output for m = 5, n = 6" )
fill0X( 5 , 6 )
print ( "Output for m = 4, n = 4" )
fill0X( 4 , 4 )
print ( "Output for m = 3, n = 4" )
fill0X( 3 , 4 )
# This code is contributed by pranchalK


C#

// C# code to demonstrate the working.
using System;
class GFG {
// Function to print alternating
// rectangles of 0 and X
static void fill0X( int m, int n)
{
/* k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator */
int i, k = 0, l = 0;
// Store given number of rows
// and columns for later use
int r = m, c = n;
// A 2D array to store
// the output to be printed
char [,]a = new char [m,n];
// Initialize the character
// to be stored in a[][]
char x = 'X' ;
// Fill characters in a[][] in spiral
// form. Every iteration fills
// one rectangle of either Xs or Os
while (k < m && l < n)
{
/* Fill the first row from the
remaining rows */
for (i = l; i < n; ++i)
a[k,i] = x;
k++;
/* Fill the last column from the
remaining columns */
for (i = k; i < m; ++i)
a[i,n-1] = x;
n--;
/* Fill the last row from the
remaining rows */
if (k < m)
{
for (i = n-1; i >= l; --i)
a[m-1,i] = x;
m--;
}
/* Print the first column
from the remaining columns */
if (l < n)
{
for (i = m-1; i >= k; --i)
a[i,l] = x;
l++;
}
// Flip character for next
// iteration
x = (x == '0' )? 'X' : '0' ;
}
// Print the filled matrix
for (i = 0; i < r; i++)
{
for ( int j = 0; j < c; j++)
Console.Write(a[i,j] + " " );
Console.WriteLine();
}
}
/* Driver program to test
above functions */
public static void Main ()
{
Console.WriteLine( "Output for"
+ " m = 5, n = 6" );
fill0X(5, 6);
Console.WriteLine( "Output for"
+ " m = 4, n = 4" );
fill0X(4, 4);
Console.WriteLine( "Output for"
+ " m = 3, n = 4" );
fill0X(3, 4);
}
}
// This code is contributed by Sam007.


PHP

<?php
// PHP program to Create a matrix with
// alternating rectangles of O and X
// Function to print alternating
// rectangles of 0 and X
function fill0X( $m , $n )
{
/* k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator */
$k = 0;
$l = 0;
// Store given number of rows
// and columns for later use
$r = $m ;
$c = $n ;
// A 2D array to store the
// output to be printed
// Initialize the character
// to be stored in a[][]
$x = 'X' ;
// Fill characters in a[][] in
// spiral form. Every iteration fills
// one rectangle of either Xs or Os
while ( $k < $m && $l < $n )
{
/* Fill the first row from
the remaining rows */
for ( $i = $l ; $i < $n ; ++ $i )
$a [ $k ][ $i ] = $x ;
$k ++;
/* Fill the last column from
the remaining columns */
for ( $i = $k ; $i < $m ; ++ $i )
$a [ $i ][ $n - 1] = $x ;
$n --;
/* Fill the last row from
the remaining rows */
if ( $k < $m )
{
for ( $i = $n - 1; $i >= $l ; -- $i )
$a [ $m - 1][ $i ] = $x ;
$m --;
}
/* Print the first column from
the remaining columns */
if ( $l < $n )
{
for ( $i = $m - 1; $i >= $k ; -- $i )
$a [ $i ][ $l ] = $x ;
$l ++;
}
// Flip character for
// next iteration
$x = ( $x == '0' )? 'X' : '0' ;
}
// Print the filled matrix
for ( $i = 0; $i < $r ; $i ++)
{
for ( $j = 0; $j < $c ; $j ++)
echo ( $a [ $i ][ $j ]. " " );
echo "" ;
}
}
// Driver Code
echo "Output for m = 5, n = 6" ;
fill0X(5, 6);
echo "Output for m = 4, n = 4" ;
fill0X(4, 4);
echo "Output for m = 3, n = 4" ;
fill0X(3, 4);
// This code is contributed by ChitraNayal.
?>


Javascript

<script>
// JavaScript code to demonstrate the working.
// Function to print alternating
// rectangles of 0 and X
function fill0X(m, n)
{
/* k - starting row index
m - ending row index
l - starting column index
n - ending column index
i - iterator */
let i, k = 0, l = 0;
// Store given number of rows
// and columns for later use
let r = m, c = n;
// A 2D array to store
// the output to be printed
let a = new Array(m);
for (let i = 0; i < m; i++)
{
a[i] = new Array(n);
}
// Initialize the character
// to be stored in a[][]
let x = 'X' ;
// Fill characters in a[][] in spiral
// form. Every iteration fills
// one rectangle of either Xs or Os
while (k < m && l < n)
{
// Fill the first row from the
// remaining rows
for (i = l; i < n; ++i)
{
a[k][i] = x;
}
k++;
// Fill the last column from the
// remaining columns
for (i = k; i < m; ++i)
{
a[i][n - 1] = x;
}
n--;
// Fill the last row from the
// remaining rows
if (k < m)
{
for (i = n - 1; i >= l; --i)
a[m - 1][i] = x;
m--;
}
// Print the first column
// from the remaining columns
if (l < n)
{
for (i = m - 1; i >= k; --i)
{
a[i][l] = x;
}
l++;
}
// Flip character for next iteration
x = (x == '0' ) ? 'X' : '0' ;
}
// Print the filled matrix
for (i = 0; i < r; i++)
{
for (let j = 0; j < c; j++)
{
document.write(a[i][j] + " " );
}
document.write( "<br>" );
}
}
// Driver Code
document.write( "Output for m = 5, n = 6 <br>" );
fill0X(5, 6);
document.write( "Output for m = 4, n = 4<br>" );
fill0X(4, 4);
document.write( "Output for m = 3, n = 4<br>" );
fill0X(3, 4);
// This code is contributed by rag2127
</script>


输出:

Output for m = 5, n = 6X X X X X XX 0 0 0 0 XX 0 X X 0 XX 0 0 0 0 XX X X X X XOutput for m = 4, n = 4X X X XX 0 0 XX 0 0 XX X X XOutput for m = 3, n = 4X X X XX 0 0 XX X X X 

时间复杂度:O(mn) 辅助空间:O(mn)

请建议是否有更好的解决方案,在空间和时间方面更有效。 本文由 迪帕克·比什特 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享