开篇话
这道题乍一看还挺难的,但是发现方法后就好办了。
简便做法
首先开一个二维数组
�
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;
}