开篇话
这道题乍一看还挺难的,但是发现方法后就好办了。
简便做法
首先开一个二维数组?
�
105
,
105
a?
105,105
?
? (我的前教练告诉我,数组开得比数据范围大?
5
5 是个好习惯)。
这道题让我们将读入的二维数组(即图像)顺时针旋转?
90
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;?
}