题目

对于一个 n 行 m 列的表格,我们可以使用螺旋的方式给表格依次填上正整数,我们称填好的表格为一个螺旋矩阵。

例如,一个 4 行 5 列的螺旋矩阵如下:

1	2	3	4	5
14 	15 	16 	17 	6
13 	20 	19 	18 	7
12 	11 	10 	9	8

输入描述
输入两个整数 n、 m,分别表示螺旋矩阵的行数和列数。

输出描述
输出一个n行m列的螺旋矩阵。

输入样例
4 5

输出样例

1	2	3	4	5
14 	15 	16 	17 	6
13 	20 	19 	18 	7
12 	11 	10 	9	8

代码

#include <iostream>
using namespace std;

void Matrix(int **matrix, int matrixRowlen, int matrixColLen)
{
    int left = 0, right = matrixColLen - 1;
    int up = 0, down = matrixRowlen - 1;
    int inx = 1;
    while (left <= right && up <= down)
    {
        for (int i = left; i <= right; ++i)
        {
            matrix[up][i] = inx++;
        }
        up++;
        if (up > down)
            break;
        for (int i = up; i <= down; ++i)
        {
            matrix[i][right] = inx++;
        }
        right--;
        if (left > right)
            break;
        for (int i = right; i >= left; --i)
        {
            matrix[down][i] = inx++;
        }
        down--;
        if (up > down)
            break;
        for (int i = down; i >= up; --i)
        {
            matrix[i][left] = inx++;
        }
        left++;
        if (left > right)
            break;
    }
}
int main()
{
    int n, m;
    cin >> n >> m;

    int **arr = new int *[n];
    for (int i = 0; i < n; i++)
        arr[i] = new int[m]{0};

    Matrix(arr, n, m);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            cout << arr[i][j] << "\t";
        cout << endl;
    }

    return 0;
}

运行结果

posted on 2022-10-23 15:59  Apull  阅读(26)  评论(0)    收藏  举报  来源