当n=3时,所构造的矩阵如输出样例所示。观察该矩阵,相信你能找到规律。现在,给你一个整数n,请构造出相应的n阶矩阵。 输入格式: 首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试数据输入一个正整数n(n≤20)。 输出格式: 对于每组测试,逐行输出构造好的矩阵,每行中的每个数字占5个字符宽度。 输入样例: c语言
时间: 2024-02-13 17:06:52 浏览: 137
这是一个简单的数学题,我们可以通过观察规律来构造矩阵。首先,我们可以发现在每个 $2\times 2$ 的小矩阵中,左上角和右下角的元素都是 $1$,而右上角和左下角的元素都是 $0$。接着,我们可以把一个 $2^k\times 2^k$ 的矩阵分成四个 $2^{k-1}\times 2^{k-1}$ 的子矩阵,每个子矩阵都按照上述规律填充,然后按照下面的方式拼接起来:
$$\begin{bmatrix}M_{k-1} & M_{k-1}\\M_{k-1} & M_{k-1}\end{bmatrix}$$
其中 $M_{k-1}$ 表示一个 $2^{k-1}\times 2^{k-1}$ 的子矩阵。最终构造出的矩阵就是一个 $2^n\times 2^n$ 的矩阵,具体的实现可以参考下面的 Python 代码:
```python
def construct_matrix(n):
if n == 1:
return [[1]]
m = 2 ** (n - 1)
sub_matrix = construct_matrix(n - 1)
matrix = [[0] * m for _ in range(m)]
for i in range(m):
for j in range(m):
matrix[i][j] = sub_matrix[i % (m // 2)][j % (m // 2)]
for i in range(m):
for j in range(m, 2 * m):
matrix[i][j] = sub_matrix[i % (m // 2)][j % (m // 2)] + m // 2
for i in range(m, 2 * m):
for j in range(m):
matrix[i][j] = sub_matrix[i % (m // 2)][j % (m // 2)] + m // 2
for i in range(m, 2 * m):
for j in range(m, 2 * m):
matrix[i][j] = sub_matrix[i % (m // 2)][j % (m // 2)]
return matrix
t = int(input())
for _ in range(t):
n = int(input())
matrix = construct_matrix(n)
for row in matrix:
print(' '.join([str(x).rjust(5) for x in row]))
```
阅读全文