📌  相关文章
📜  国际空间研究组织 | ISRO CS 2015 |问题 52(1)

📅  最后修改于: 2023-12-03 15:37:15.320000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2015 |问题 52

本题要求实现一个程序来给定一个整数 n,输出一个 n x n 的矩阵,该矩阵是一个以顺时针方向旋转的数字矩阵。

输入格式

输入共一行,为一个整数 n,表示欲输出的矩阵的行数与列数。

输出格式

输出共 n 行,每行 n 个数字,代表所求的矩阵。每两个相邻的数字间应有一个空格。

输入样例
4
输出样例
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
解题思路

顺时针旋转输出数字矩阵,可以分为以下四个步骤:

  1. 从左到右:从左到右输出最上面一行的所有元素,然后去掉这一行。
  2. 从上到下:从上到下输出最右边一列的所有元素,然后去掉这一列。
  3. 从右到左:从右到左输出最下面一行的所有元素,然后去掉这一行。
  4. 从下到上:从下到上输出最左边一列的所有元素,然后去掉这一列。

重复执行上述步骤,直到矩阵中所有元素被输出为止。

代码实现
def clockwise_matrix(n):
    res = [[0]*n for _ in range(n)]
    cur_num = 1
    left, top, right, bottom = 0, 0, n-1, n-1
    while left <= right and top <= bottom:
        for col in range(left, right+1):
            res[top][col] = cur_num
            cur_num += 1
        top += 1
        for row in range(top, bottom+1):
            res[row][right] = cur_num
            cur_num += 1
        right -= 1
        for col in range(right, left-1, -1):
            res[bottom][col] = cur_num
            cur_num += 1
        bottom -= 1
        for row in range(bottom, top-1, -1):
            res[row][left] = cur_num
            cur_num += 1
        left += 1
    return res
    
n = int(input())
matrix = clockwise_matrix(n)
for row in matrix:
    print(" ".join(map(str, row)))

代码输出结果为:

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

以上是本题的题意、思路和代码实现,希望能对您有所帮助。