Acwing 3212. 图像旋转
题目链接:
解题思路:数组
将数组逆时针旋转90度
步骤:
-
两重循环,第一重循环:$i $从 $m-1$ 遍历到 $0$
第二重循环:$j $ 从 $0$ 遍历到 $ n - 1$ -
输出 $jpg[j][i]$
证明:why?
首先将要输出的框架列出来,什么是框架,就是循环的次数(几行几列):
- 已知输出的结果是 $m$ 行,$n$列
所以可以简单列个两重循环
c++
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
-
遍历数组的一行那么就是:行不变,遍历列
同理:遍历列时,列不变,行变。 -
而两重循环的时候,第一重循环每遍历一个数,第二重循环就会全部遍历一遍,就符合上面所说的过程。
-
遍历行:$jpg[i][j]$
遍历列: $jpg[j][i]$
其会按照顺序将将列一行一行的输出出来。对比答案,答案是逆序输出,所以将行的顺序修改一下,变成倒序,for(int i = m-1; i >= 0; i++)
就可以得出结果
C++代码
#include<iostream>
using namespace std;
const int N = 1005;
int jpg[N][N];
int main()
{
int n ,m;
cin>>n>>m;
for(int i = 0; i < n; i ++)
for(int j = 0; j < m; j++)
cin>>jpg[i][j];
for(int i = m-1; i >= 0; i-- )
{
for(int j = 0; j < n; j++)
cout<<jpg[j][i]<<" ";
cout<<endl;
}
return 0;
}