CSP201503-1影像旋轉(C++100分)
問題描述
旋轉是影像處理的基本操作,在這個問題中,你需要將一個影像逆時針旋轉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的非負整數,
思路
本題主要考查點在于找到矩陣旋轉前后的映射公式,陣列下標從1開始,
初始陣列為a,旋轉后的陣列為b,
通過樣例可以觀察到,陣列a的第一行對應陣列b的第一列,陣列a的第二行對應陣列b的第二列,則某個元素在陣列b中的列標即為其在陣列a中的行標i,
再觀察陣列a的第一行元素,其中第一行第一列元素對應陣列b中第三行,即最后一行;b第一行第二列對應陣列b中第二行,若陣列a有m列,則某個元素在陣列b中的行標即為m-j+1,其中j為其在陣列a中的列標,
綜上所述,映射公式為
b
[
m
?
j
+
1
]
[
i
]
=
a
[
i
]
[
j
]
b[m - j + 1][i] = a[i][j]
b[m?j+1][i]=a[i][j]
//by sdudyl
#include<iostream>
using namespace std;
int a[1010][1010] = { 0 };
int b[1010][1010] = { 0 };
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
b[m - j + 1][i] = a[i][j];
for (int i = 1; i <= m; i++)
{
for (int j = 1; j <= n; j++)
cout << b[i][j] << " ";
cout << endl;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/265917.html
標籤:其他
