天天看點

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 }