一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案依照下面列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再依照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
假设有多种可用的转换方法,请选择序号最小的那个。
仅仅使用1--7中的一个步骤来完毕这次转换。
[编辑]格式
PROGRAM NAME: transform
INPUT FORMAT:
(file transform.in)
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”)。这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
OUTPUT FORMAT:
(file transform.out)
单独的一行包含1到7之间的一个数字(在上文已描写叙述)表明须要将转换前的正方形变为转换后的正方形的转换方法。
[编辑]SAMPLE INPUT
3
@-@
---
@@-
@-@
@--
--@
[编辑]SAMPLE OUTPUT
1
/* ID: zwcwu52 PROG: transform LANG: C++ */ #include <iostream> #include <fstream> #include <string> using namespace std; char blkSrc[10][10], blkDst[10][10]; //源方阵、目标方阵 int main() { ofstream fout ("transform.out"); ifstream fin ("transform.in"); unsigned N; //阶数 unsigned num = 7; //方案数字 fin >> N; //读取源方阵 for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) {fin >> blkSrc[i][j];} } //读取目标方阵 for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) {fin >> blkDst[i][j];} } do { bool b = true; //b 标识是否全然符合 //按方案1检測 for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[j][N - i - 1]) { b = false; break; } } } if(true == b) { num = 1; break; } //按方案2检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[N- i - 1][N - j - 1]) { b = false; break; } } } if(true == b) { num = 2; break; } //按方案3检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[N- j - 1][i]) { b = false; break; } } } if(true == b) { num = 3; break; } //按方案4检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[i][N - j - 1]) { b = false; break; } } } if(true == b) { num = 4; break; } //按方案5检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[N - j - 1][N - i - 1]) { b = false; break; } } } if(true == b) { num = 5; break; } //按方案5检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[N - i - 1][j]) { b = false; break; } } } if(true == b) { num = 5; break; } //按方案5检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[j][i]) { b = false; break; } } } if(true == b) { num = 5; break; } //按方案6检測 b = true; for(unsigned i = 0; i < N; i++) { for(unsigned j = 0; j < N; j++) { if(blkSrc[i][j] != blkDst[i][j]) { b = false; break; } } } if(true == b) { num = 6; break; } }while(0); fout << num << endl; return 0; }