一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
- 1:转90度:图案按顺时针转90度。
- 2:转180度:图案按顺时针转180度。
- 3:转270度:图案按顺时针转270度。
- 4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
- 5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
- 6:不改变:原图案不改变。
- 7:无效转换:无法用以上方法得到新图案。
- 如果有多种可用的转换方法,请选择序号最小的那个。
INPUT FORMAT:
(file transform.in)
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
OUTPUT FORMAT:
(file transform.out)
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
input:
3
@-@
---
@@-
@-@
@--
--@
output:
1
【参考程序】:
/*
ID: XIONGNA1
PROG: transform
LANG: C++
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[11][11],b[11][11],c[11][11],d[11][11];
int n;
bool tf1()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[j][n-i+1]=a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]!=b[i][j]) return false;
return true;
}
bool tf2()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[n-i+1][n-j+1]=a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]!=b[i][j]) return false;
return true;
}
bool tf3()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[n-j+1][i]=a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]!=b[i][j]) return false;
return true;
}
bool tf4()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[i][n-j+1]=a[i][j];
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]!=b[i][j]) return false;
return true;
}
bool tf5()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
c[i][n-j+1]=a[i][j];
bool d1,d2,d3;
d1=d2=d3=true;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
d[j][n-i+1]=c[i][j];
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
if (d[i][j]!=b[i][j])
{
d1=false;
break;
}
if (!d1) break;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
d[n-i+1][n-j+1]=c[i][j];
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
if (d[i][j]!=b[i][j])
{
d2=false;
break;
}
if (!d2) break;
}
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
d[n-j+1][i]=c[i][j];
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
if (d[i][j]!=b[i][j])
{
d3=false;
break;
}
if (!d3) break;
}
return (d1||d2||d3);
}
bool tf6()
{
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (c[i][j]!=b[i][j]) return false;
return true;
}
int main()
{
freopen("transform.in","r",stdin);
freopen("transform.out","w",stdout);
scanf("%d\n",&n);
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++) scanf("%c",&a[i][j]);
getchar();
}
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++) scanf("%c",&b[i][j]);
getchar();
}
if (tf1()) printf("1\n");
else if (tf2()) printf("2\n");
else if (tf3()) printf("3\n");
else if (tf4()) printf("4\n");
else if (tf5()) printf("5\n");
else if (tf6()) printf("6\n");
else printf("7\n");
return 0;
}