首页 > 代码库 > 【USACO1.2_2】★Transformations 方块转换
【USACO1.2_2】★Transformations 方块转换
一块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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。