图像旋转

· · 题解

开篇话

这道题乍一看还挺难的,但是发现方法后就好办了。

简便做法

首先开一个二维数组 a_{105,105}我的前教练告诉我,数组开得比数据范围大 5 是个好习惯)。

这道题让我们将读入的二维数组(即图像)顺时针旋转 90 度以后输出。但是如果我们真的写一个这样的程序的话会十分麻烦,那有没有简便的写法呢?答案是肯定的!那具体怎么简便呢?

我们设样例的输入为:

a[1][1] a[1][2] a[1][3]
a[2][1] a[2][2] a[2][3]
a[3][1] a[3][2] a[3][3]

那么,想要得到样例输出的话,就要:

1.每次先将图像做左右对称处理,得到下图↓

a[1][3] a[1][2] a[1][1]
a[2][3] a[2][2] a[2][1]
a[3][3] a[3][2] a[3][1]

2.再将 i(前下标) 和 j(后下标) 换过来,就可以得到输出!

a[3][1] a[2][1] a[1][1]
a[3][2] a[2][2] a[1][2]
a[3][3] a[2][3] a[1][3]

3.用代码实现,就是:

for(i = 1; i <= m; i++){
        for(j = n; j >= 1; j--) cout<< a[j][i] << " " ;
        cout<< endl;
    }

AC code

#include <bits/stdc++.h>//万能头文件(但不是彻底万能的)
using namespace std; 
int m,n,a[105][105],i,j;
int main(){
    cin >> n >> m;
    for(i = 1; i <= n; i++)
        for(j = 1; j <= m; j++) cin >> a[i][j];//读入二维数组里的每一个元素。 
    for(i = 1; i <= m; i++){
        for(j = n; j >= 1; j--) cout<< a[j][i] << " " ;//将图像顺时针旋转 90 度输出。 
        cout<< endl;
    }
    return 0; 
}