codevs1287方块转换(数学转换)
程序员文章站
2024-01-13 19:43:34
...
题目描述 Description
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始
图案按照以下列转换方法转换成新图案的最小方式:
#1:转90度:图案按顺时针转90度。
#2:转180度:图案按顺时针转180度。
#3:转270度:图案按顺时针转270度。
#4:反射:图案在水平方向翻转(形成原图案的镜像)。
#5:组合:图案在水平方向翻转,然后按照#1-#3之一转换。
#6:不改变:原图案不改变。
#7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
输入描述 Input Description
第一行: | 单独的一个整数N。 |
第二行到第N+1行: | N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。 |
第N+2行到第2*N+1行: | N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。 |
输出描述 Output Description
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的
转换方法。
样例输入 Sample Input
3
@[email protected]
---
@@-
@[email protected]
@--
[email protected]
样例输出 Sample Output
1
数据范围及提示 Data Size & Hint
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
char c1[n][n],c2[n][n];
int a[9];
for(int i=0;i<9;i++) a[i]=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>c1[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>c2[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if(c2[i][j]==c1[j][n-1-i]) a[1]++;//顺90
if(c2[i][j]==c1[n-1-i][n-1-j]) a[2]++;//顺180
if(c2[i][j]==c1[n-1-j][i]) a[3]++;//顺270
if(c2[i][j]==c1[i][n-1-j]) a[4]++;//反射
if(c2[i][n-1-j]==c1[j][n-1-i]) a[5]++;
if(c2[i][n-1-j]==c1[n-1-i][n-1-j]) a[6]++;
if(c2[i][n-1-j]==c1[n-1-j][i]) a[7]++;
if(c2[i][j]==c1[i][j]) a[8]++;
}
for(int i=1;i<9;i++)
if(a[i]==n*n)
{
if(i<5) cout<<i;
else if(i==8) cout<<6;
else cout<<5;
return 0;
}
cout<<7;
return 0;
}
上一篇: CodeVs1344 线型网络