按列从下到上读取原图,直接生成顺时针旋转 90 度后的图像。
OJ: noi_openjudge
题目 ID: ch0108-11
难度:入门
标签:矩阵模拟python
创建: 2026-07-30 23:01
更新: 2026-07-31 11:59
后置题目
noi_openjudge ch0112-09图像旋转翻转变换B 的顺时针旋转复用 A 教的「新行=原列自下而上」行列映射(用 zip(*image[::-1]) 实现同一效果),再叠加逆时针、两种翻转与按操作串依次执行的变换序列。luogu P4924[1007] 魔法少女小ScarletB 复用 A 的顺时针旋转行列对应步骤,把整图旋转换成奇数阶子矩阵按同一坐标映射旋转并复制写回luogu P1205[USACO1.2] 方块转换 TransformationsB 的 rotate 函数复用 A 的「顺时针旋转 90 度 = 结果每行取原图一列、从下到上读取」这一步,并用它组合出 90/180/270 与反射后再旋转,再叠加 A 未教的水平反射与按编号顺序枚举取最小答案。
题意
将
思路
旋转结果的每一行对应原图的一列,且该列要从下到上读取。外层枚举原列,内层从最后一行到第一行输出。
代码
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;
}复杂度
时间复杂度为
总结
矩阵旋转可转化为明确的行列读取顺序,无需额外构造结果矩阵。