顺时针旋转矩阵 90°:新矩阵的第 i 行是原矩阵第 i 列从下到上读取。
OJ: roj
题目 ID: 1127
难度:入门
标签:矩阵模拟
创建: 2026-09-29 20:02
更新: 2026-10-05 02:40
题目描述
输入 3 3 / 1 2 3 / 4 5 6 / 7 8 9,输出 7 4 1 / 8 5 2 / 9 6 3。
思路
顺时针旋转
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 20:02
# update_at: 2026-09-29 20:02
import sys
def solve() -> None:
"""顺时针旋转 90 度后输出图像。"""
data = list(map(int, sys.stdin.buffer.read().split()))
it = iter(data)
n = next(it) # 行数
m = next(it) # 列数
a = [[next(it) for _ in range(m)] for _ in range(n)] # n × m 像素矩阵
# 旋转后尺寸为 m × n:新图第 i 行是原图第 i 列从下到上读取
out = [
' '.join(str(a[n - 1 - j][i]) for j in range(n))
for i in range(m)
]
sys.stdout.write('\n'.join(out))
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-05 02:40
* update_at: 2026-10-05 02:40
*/
#include <cstdio>
typedef long long ll; // 题目数据统一用 long long
const int MAXN = 105;
const int MAXM = 105;
ll a[MAXN][MAXM]; // a[i][j] 表示原图第 i 行第 j 列的像素(下标从 1 开始)
// 题意:把 n 行 m 列的图像顺时针旋转 90 度后输出,结果为 m 行 n 列
// 旋转后 b[i][j] = a[n-j+1][i],即新图第 i 行等于原图第 i 列从下往上读
int main() {
ll n, m;
if (scanf("%lld %lld", &n, &m) != 2) return 0;
for (ll i = 1; i <= n; ++i) {
for (ll j = 1; j <= m; ++j) {
scanf("%lld", &a[i][j]);
}
}
for (ll i = 1; i <= m; ++i) {
for (ll j = n; j >= 1; --j) {
if (j != n) printf(" ");
printf("%lld", a[j][i]); // 原图第 i 列自下而上
}
printf("\n");
}
return 0;
}