图像旋转

GitHub跳转原题关系图返回列表

按列从下到上读取原图,直接生成顺时针旋转 90 度后的图像。

OJ: noi_openjudge

题目 ID: ch0108-11

难度:入门

标签:矩阵模拟python

日期: 2026-07-30 23:01

题意

n×mn\times m 图像顺时针旋转 9090 度。

思路

旋转结果的每一行对应原图的一列,且该列要从下到上读取。外层枚举原列,内层从最后一行到第一行输出。

代码

cpp
#include <cstdio>

int n,m,k;
int a[200][200];
int b[200][200];
int c[200][200];
int main(){
    int i,j;
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
             b[j][n-i+1]= a[i][j];
        }
    }
    for (i=1;i<=m;i++){
        for (j=1;j<=n;j++){
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }

    return 0;
}

复杂度

总结

Python代码

python
row_count, column_count = map(int, input().split())
image = [input().split() for _ in range(row_count)]

for column in range(column_count):
    print(*(image[row][column] for row in range(row_count - 1, -1, -1)))

C++代码

cpp
#include <cstdio>

int n,m,k;
int a[200][200];
int b[200][200];
int c[200][200];
int main(){
    int i,j;
    scanf("%d%d",&n,&m);
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for (i=1;i<=n;i++){
        for (j=1;j<=m;j++){
             b[j][n-i+1]= a[i][j];
        }
    }
    for (i=1;i<=m;i++){
        for (j=1;j<=n;j++){
            printf("%d ",b[i][j]);
        }
        printf("\n");
    }

    return 0;
}

复杂度

时间复杂度为 O(nm)O(nm),输入矩阵空间为 O(nm)O(nm)

总结

矩阵旋转可转化为明确的行列读取顺序,无需额外构造结果矩阵。