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

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

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

题目描述

给定一个N * N的矩阵,要求按照顺时针方向,从外到内依次打印出矩阵各元素的值

输入格式

输入的第一行为一个整数T,表示测试数据的组数。接下来的T行,每行包含两个整数N和X,其中N表示矩阵的维数,X为一个一维的长度为N * N的整数数组,其中每一行表示一行矩阵的元素。

输出格式

对于每一组测试数据,按照从外到内的顺序依次输出矩阵的各个元素。

示例

输入

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

输出

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

此题可以使用模拟的方式来实现,从外到内一圈一圈的打印矩阵的元素。

代码实现
for _ in range(int(input())):
    n, a = int(input()), input().split()
    for i in range(n):
        for j in range(n):
            i1, j1 = min(i, n - i - 1), min(j, n - j - 1)
            k = min(i1, j1, n - i1 - 1, n - j1 - 1)
            d = (n - 2 * k) ** 2 + i - k + (j - k) * (n - 2 * k)
            print(a[d - 1], end=' ')
    print()

其中,输入的一维数组a需要转换成二维矩阵才可以进行计算。

n, a = int(input()), input().split()
matrix = []
for i in range(n):
    row = []
    for j in range(n):
        row.append(int(a[i * n + j]))
    matrix.append(row)

输出使用end参数为一个空格,因为在Python中,print函数默认会输出换行符。