题目描述

输入 nn 行 mm 列(1≤n,m≤1001\le n,m\le 100,像素为 0∼2550\sim 255 的整数)的图像,将它顺时针旋转 90∘90^\circ 后输出 mm 行、每行 nn 个整数。样例:输入 3 3 / 1 2 3 / 4 5 6 / 7 8 9,输出 7 4 1 / 8 5 2 / 9 6 3。

思路

顺时针旋转 90∘90^\circ 后,新矩阵第 ii 行对应原矩阵第 ii 列,且读取方向由从上往下变为从下往上,即 bi,j=an−1−j, ib_{i,j}=a_{n-1-j,\,i}。按此映射双重循环输出即可,时间与空间复杂度均为 O(n⋅m)O(n\cdot m)。

参考代码

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;
}