翻天覆地
描述
n 行 n 列矩阵中,从左上角到右下角的对角线被称为主对角线,从左下角到右上角的对角线被称为副对角线。
给定一个 n 行 n 列的整数矩阵 A,请输出 A 关于主对角线或副对角线翻转后的矩阵
输入描述
第一行两个整数 n,t,表示矩阵的大小和关于哪条对角线翻转。t=1 表示关于主对角线翻转,t=2 表示关于副对角线翻转
接下来 n 行,每行 n 个整数,表示矩阵 A 的中的元素
输出描述
输出 n 行,每行 n 个整数,表示翻转后的矩阵
用例输入 1
3 1
1 2 3
4 5 6
7 8 9
用例输出 1
1 4 7
2 5 8
3 6 9
用例输入 2
3 2
1 2 3
4 5 6
7 8 9
用例输出 2
9 6 3
8 5 2
7 4 1
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n, t;
cin >> n >> t;
int A[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> A[i][j];
}
}
if (t == 1) {
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
swap(A[i][j], A[j][i]);
}
}
} else if (t == 2) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n - i - 1; j++) {
swap(A[i][j], A[n - j - 1][n - i - 1]);
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << A[i][j] << ' ';
}
cout << endl;
}
return 0;
}
【以下回答由 GPT 生成】
def matrix_flip(n, t, matrix):
# 定义一个二维数组来保存翻转后的矩阵
flipped_matrix = [[0] * n for _ in range(n)]
if t == 1:
# 主对角线翻转:将原矩阵的行和列对应位置的元素交换
for i in range(n):
for j in range(n):
flipped_matrix[j][i] = matrix[i][j]
elif t == 2:
# 副对角线翻转:将原矩阵的行列倒序输出
for i in range(n):
for j in range(n):
flipped_matrix[i][j] = matrix[n-1-i][n-1-j]
else:
print("无效的翻转类型")
return None
return flipped_matrix
使用示例:
n = int(input())
t, = map(int, input().split())
matrix = []
for _ in range(n):
row = list(map(int, input().split()))
matrix.append(row)
flipped_matrix = matrix_flip(n, t, matrix)
for row in flipped_matrix:
print(" ".join(map(str, row)))
这个程序定义了一个 matrix_flip
函数,它接受矩阵的大小 n
、对角线翻转类型 t
(1表示主对角线翻转,2表示副对角线翻转),以及原始矩阵 matrix
。函数返回翻转后的矩阵。
首先,我们创建一个空的二维数组 flipped_matrix
来保存翻转后的矩阵。
然后,根据翻转类型 t
,使用嵌套循环遍历原矩阵 matrix
。如果 t
是1,就将原矩阵的行和列对应位置的元素交换,即将 matrix[i][j]
放到 flipped_matrix[j][i]
;如果 t
是2,就将原矩阵的行列倒序输出,即将 matrix[i][j]
放到 flipped_matrix[n-1-i][n-1-j]
。
最后,返回翻转后的 flipped_matrix
。
使用示例中,我们可以输入示例输入,并将翻转后的矩阵输出到标准输出。
【相关推荐】