USACO - Chapter1 Section 1.2 - Transformations
2017-05-13 13:36
513 查看
Transformations
题目描述
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用1–7中的一个步骤来完成这次转换。
输入输出格式
输入格式:
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
输出格式:
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
输入输出样例
输入样例#1:
3
@-@
@–
–@
输出样例#1:
1
本题利用了一些格式规整的范式来进行矩阵的变换和处理,将复杂、重复性高的部分放入几个函数中完成,按照顺序一个个进行检验。
Code
题目描述
一块N x N(1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:
1:转90度:图案按顺时针转90度。
2:转180度:图案按顺时针转180度。
3:转270度:图案按顺时针转270度。
4:反射:图案在水平方向翻转(以中央铅垂线为中心形成原图案的镜像)。
5:组合:图案在水平方向翻转,然后再按照1到3之间的一种再次转换。
6:不改变:原图案不改变。
7:无效转换:无法用以上方法得到新图案。
如果有多种可用的转换方法,请选择序号最小的那个。
只使用1–7中的一个步骤来完成这次转换。
输入输出格式
输入格式:
第一行: 单独的一个整数N。
第二行到第N+1行: N行每行N个字符(不是“@”就是“-”);这是转换前的正方形。
第N+2行到第2*N+1行: N行每行N个字符(不是“@”就是“-”);这是转换后的正方形。
输出格式:
单独的一行包括1到7之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法。
输入输出样例
输入样例#1:
3
@-@
@@-@-@
@–
–@
输出样例#1:
1
本题利用了一些格式规整的范式来进行矩阵的变换和处理,将复杂、重复性高的部分放入几个函数中完成,按照顺序一个个进行检验。
Code
#include<iostream> #include<cmath> using namespace std; int n,i,j,k=1,temp;//k用于标记序号 bool sc = false; bool a[11][11]={0},b[11][11]={0};//a原正方形,b转换后正方形 char ch; void image_by_inversion() { for (int i=1;i<=n;i++) for (int j=1;j<=n/2;j++) { temp=a[i][j]; a[i][j]=a[i][n-j+1]; a[i][n-j+1]=temp; } } void rotate90() { int m[11][11]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) m[j][n-i+1]=a[i][j];//旋转 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=m[i][j];//返回正方形 } void judgement() { for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) if (a[i][j]!=b[i][j]) return; cout <<k <<endl; exit(0); // 直接退出main 此处不可以写 return } int main() { cin>>n; for (i=1;i<=n;i++) { for (j=1;j<=n;j++) { cin>>ch; if (ch=='@') a[i][j]=1; } } for (i=1;i<=n;i++) { for (j=1;j<=n;j++) { cin>>ch; if (ch=='@') b[i][j]=1; } } rotate90();judgement();k++; rotate90();judgement();k++; rotate90();judgement();k++; rotate90(); image_by_inversion();judgement();k++; rotate90();judgement(); rotate90();judgement(); rotate90();judgement();k++; rotate90(); image_by_inversion(); judgement(); cout<<"7"<<endl;//没找到,直接输出7 return 0; }
相关文章推荐
- USACO-Section 1.2 Transformations [...]
- USACO-Section1.2 Transformations【数论.矩阵旋转】
- USACO Section 1.2 : Transformations
- USACO - Chapter1 Section 1.2 - Milking Cows
- USACO-Section1.2 Transformations
- 【USACO-Chapter1-1.2】【模拟】Transformations
- USACO - Chapter1 Section 1.2 - Palindromic Squares
- USACO-Section1.2 Transformations [其他]
- USACO - Chapter1 Section 1.2 - Dual Palindromes
- USACO Chapter1-Getting started Section 1.2
- usaco section1.2 Transformations
- USACO Section1.2 Transformations
- USACO Section1.2 Palindromic Squares
- USACO Section1.2破碎的项链
- usaco Chapter 3 section 3.1 Contact
- USACO - Chapter1 Section 1.3 - Combination Lock
- USACO-Section 1.2 Milking Cows[数组模拟]
- USACO Section1.2 Dual Palindromes
- USACO-Section1.2 palsquare[字符处理]
- [USACO Training] Section 1.2