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

📅  最后修改于: 2022-05-13 01:57:21.820000             🧑  作者: Mango

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

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

例子:

Input: m = 3, n = 3
Output: Following matrix 
X X X
X 0 X
X X X

Input: m = 4, n = 5
Output: Following matrix
X X X X X
X 0 0 0 X
X 0 0 0 X
X X X X X

Input:  m = 5, n = 5
Output: Following matrix
X X X X X
X 0 0 0 X
X 0 X 0 X
X 0 0 0 X
X X X X X

Input:  m = 6, n = 7
Output: Following matrix
X X X X X X X
X 0 0 0 0 0 X
X 0 X X X 0 X
X 0 X X X 0 X
X 0 0 0 0 0 X
X X X X X X X 

我们强烈建议您将浏览器最小化并先自己尝试一下。
这个问题是在 Shreepartners Gurgaon 的校园招聘中被问到的。我遵循以下方法。
1)使用代码以螺旋形式打印矩阵。
2)不是打印数组,而是在数组中交替插入元素“X”或“0”。

以下是上述方法的实现。

C++
#include 
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 <<"\n";
    }
}
 
/* Driver program to test above functions */
int main()
{
    puts("Output for m = 5, n = 6");
    fill0X(5, 6);
 
    puts("\nOutput for m = 4, n = 4");
    fill0X(4, 4);
 
    puts("\nOutput for m = 3, n = 4");
    fill0X(3, 4);
 
    return 0;
}
 
// This code is contributed by shivanisinghss2110


C
#include 
 
// 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("\n");
    }
}
 
/* Driver program to test above functions */
int main()
{
    puts("Output for m = 5, n = 6");
    fill0X(5, 6);
 
    puts("\nOutput for m = 4, n = 4");
    fill0X(4, 4);
 
    puts("\nOutput 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
= $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 "\n";
    }
}
 
// Driver Code
echo "Output for m = 5, n = 6\n";
fill0X(5, 6);
 
echo "\nOutput for m = 4, n = 4\n";
fill0X(4, 4);
 
echo "\nOutput for m = 3, n = 4\n";
fill0X(3, 4);
 
// This code is contributed by ChitraNayal.
?>


Javascript


输出:

Output for m = 5, n = 6
X X X X X X
X 0 0 0 0 X
X 0 X X 0 X
X 0 0 0 0 X
X X X X X X

Output for m = 4, n = 4
X X X X
X 0 0 X
X 0 0 X
X X X X

Output for m = 3, n = 4
X X X X
X 0 0 X
X X X X 

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