B2107 图像旋转 题解

发布时间:2024年01月22日

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

简便做法
首先开一个二维数组?

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;?
}

文章来源:https://blog.csdn.net/xxyrcgtzbh554488/article/details/135757489
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。