方块转换 transform

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方块转换 transform相关的知识,希望对你有一定的参考价值。

方块转换 transform

【题目描述】:

一块N x N1<=N<=10)正方形的黑白瓦片的图案要被转换成新的正方形图案。

写一个程序来找出将原始图案按照以下列转换方法转换成新图案的最小方式:

#1:90 :图案按顺时针转90 .

#2:180 :图案按顺时针转180 .

#3:270 :图案按顺时针转270 .

#4:反射:图案在水平方向翻转(形成原图案的镜像).

#5:组合:图案在水平方向翻转,然后按照#1-#3 之一转换.

#6:不改变:原图案不改变.

#7:无效转换:无法用以上方法得到新图案.

如果有多种可用的转换方法,请选择序号最小的那个.

 

【输入描述】:

第一行: 单独的一个整数N.

第二行到第N+1 : N 行每行N 个字符(不是“@”就是“-”);这是转换前的正方形.

N+2 行到第2*N+1 : N 行每行N 个字符(不是“@”就是“-”);这是转换后的正方形.

 

【输出描述】:

单独的一行包括1 7 之间的一个数字(在上文已描述)表明需要将转换前的正方形变为转换后的正方形的转换方法.

 

【样例输入】

【样例输出】

3

@[email protected]

---

@@-

@[email protected]

@--

[email protected]

1

【数据范围及描述】:

 

 模拟!模拟!

 

技术分享
  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <algorithm>
  5 using namespace std;
  6 
  7 const int maxn=13;
  8 int N;
  9 char s[maxn][maxn];
 10 char e[maxn][maxn];
 11 char o[maxn][maxn];
 12 
 13 bool check()
 14 {
 15     int i,j;
 16     for(i=1;i<=N;i++)
 17         for(j=1;j<=N;j++)
 18             if(o[i][j]!=e[i][j]) return false;
 19     return true;
 20 }
 21 
 22 bool _1(char p[][maxn])
 23 {
 24     int i,j,x,y;
 25     for(i=1;i<=N;i++)
 26         for(j=1;j<=N;j++)
 27         {
 28             y=N+1-i;
 29             x=j;
 30             o[x][y]=p[i][j];
 31         }
 32     return check();
 33 }
 34 
 35 bool _2()
 36 {
 37     _1(s);
 38     char tmp[maxn][maxn];
 39     for(int i=1;i<=N;i++)
 40         for(int j=1;j<=N;j++)
 41             tmp[i][j]=o[i][j];
 42     return _1(tmp);
 43 }
 44 
 45 bool _3()
 46 {
 47     _2();
 48     char tmp[maxn][maxn];
 49     for(int i=1;i<=N;i++)
 50         for(int j=1;j<=N;j++)
 51             tmp[i][j]=o[i][j];
 52     return _1(tmp);
 53 }
 54 
 55 bool _4()
 56 {
 57     int i,j,x,y;
 58     for(i=1;i<=N;i++)
 59         for(j=1;j<=N;j++)
 60         {
 61             x=i;
 62             y=N+1-j;
 63             o[x][y]=s[i][j];
 64         }
 65     return check();
 66 }
 67 
 68 bool _5()
 69 {
 70     _4();
 71     char tmp[maxn][maxn];
 72     for(int i=1;i<=N;i++)
 73         for(int j=1;j<=N;j++)
 74             tmp[i][j]=o[i][j];
 75     if(_1(tmp)) return true;
 76     else 
 77     {
 78         for(int i=1;i<=N;i++)
 79             for(int j=1;j<=N;j++)
 80                 tmp[i][j]=o[i][j];
 81         if(_1(tmp)) return true;
 82         else
 83         {
 84             for(int i=1;i<=N;i++)
 85                 for(int j=1;j<=N;j++)
 86                     tmp[i][j]=o[i][j];
 87             if(_1(tmp)) return true;
 88         }
 89     }
 90     return false;
 91 }
 92 
 93 bool _6()
 94 {
 95     for(int i=1;i<=N;i++)
 96         for(int j=1;j<=N;j++)
 97             if(s[i][j]!=e[i][j]) return false;
 98     return true;
 99 }
100 
101 int main()
102 {
103     scanf("%d\n",&N);
104     for(int i=1;i<=N;i++)
105         gets(s[i]+1);
106     for(int i=1;i<=N;i++)
107         gets(e[i]+1);
108     int ans;
109     if(_1(s)) ans=1;
110     else if(_2()) ans=2;
111     else if(_3()) ans=3;
112     else if(_4()) ans=4;
113     else if(_5()) ans=5;
114     else if(_6()) ans=6;
115     else ans=7;
116     printf("%d",ans);
117     return 0;
118 }
View Code

 

以上是关于方块转换 transform的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1205 [USACO1.2]方块转换 Transformations

USACO1.2_2★Transformations 方块转换

洛谷 P1205 [USACO1.2]方块转换 Transformations

OpenGL彩色方块

图解unity下gameobject和transform的区别和关联

保姆级解读!CSS属性transform变形+2D转换+3D转换实例+代码+解析——Web前端系列学习笔记