天天看点

CCF CSP 201503-1 图像旋转 (降维)

题目链接:http://118.190.20.162/view.page?gpid=T27

问题描述

试题编号: 201503-1
试题名称: 图像旋转
时间限制: 5.0s
内存限制: 256.0MB
问题描述:

问题描述

  旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。

  计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。

输入格式

  输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。

  接下来n行每行包含m个整数,表示输入的图像。

输出格式

  输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。

样例输入

2 3

1 5 3

3 2 4

样例输出

3 4

5 2

1 3

评测用例规模与约定

  1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。

我的思路是:先将二维数组降维并存入长度为n*m的一维数组,然后按照以列逆序以行正序的方式逐个存入新的二维数组中,最后输出新的二维数组

1 #include <iostream>
 2 #include <algorithm>
 3 #include <cmath> 
 4 #include <string>
 5 #include <cstring>
 6 using namespace std;
 7 int n,m,sum;
 8 int a[1000005];
 9 int b[1005][1005];
10 int main()
11 {
12     while(cin>>n>>m){
13         sum=n+m;
14         for(int i=0;i<n*m;i++) cin>>a[i];
15         int t=0,flag=0;
16         for(int j=0;j<n;j++){
17             for(int i=m-1;i>=0;i--){
18                 b[i][j]=a[t++];
19                 if(t==n*m){
20                     flag=1;
21                     break;
22                 }
23             }
24             if(flag) break;
25         }
26         for(int i=0;i<m;i++){
27             for(int j=0;j<n;j++){
28                 if(j==0) cout<<b[i][j];
29                 else cout<<" "<<b[i][j];
30             }
31             cout<<endl;
32         }
33     }
34     return 0;
35 }