Transformations 方块转换

题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化:

第一种:顺时针旋转90度:

    c[j][n-i+1]=a[i][j];

第二种:旋转180度:

    c[n-i+1][n-j+1]=a[i][j];

第三种:顺时针旋转270度:

    c[i][j]=a[j][n-i+1];

第四种:反射

    c[i][n-j+1]=a[i][j];

第五种:组合

    先反射:c[i][n-j+1]=a[i][j];

    然后再按照1到3之间的一种再次转换。

第六种:不改变

    c[i][j]=a[i][j];

第七种:其他

 

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

 

  1 #include <cstdio>
  2 #include <algorithm>
  3 #include <cstring>
  4 #include <iostream>
  5 using namespace std;
  6 int n;
  7 int type;
  8 char a[11][11],b[11][11],c[11][11];
  9 void input()
 10 {
 11     cin>>n;
 12     int i,j;
 13     getchar();
 14     for(i=1; i<=n; i++)
 15     {
 16         for(j=1; j<=n; j++)
 17             cin>>a[i][j];
 18     }
 19     for(i=1; i<=n; i++)
 20     {
 21         for(j=1; j<=n; j++)
 22             cin>>b[i][j];
 23     }
 24 }
 25 void judge()
 26 {
 27     int k;
 28     int flag=0;
 29     int i,j;
 30     for(k=1; k<=6; k++)
 31     {
 32         if(k==1)//转90度
 33         {
 34             flag=0;
 35             for(i=1; i<=n; i++)
 36             {
 37                 for(j=1; j<=n; j++)
 38                     c[j][n-i+1]=a[i][j];
 39             }
 40             for(i=1; i<=n; i++)
 41             {
 42                 for(j=1; j<=n; j++)
 43                 {
 44                     if(c[i][j]!=b[i][j])
 45                     {
 46                         flag=1;
 47                         break;
 48                     }
 49                 }
 50                 if(flag)
 51                     break;
 52             }
 53             if(i==n+1)
 54             {
 55                 type=k;
 56                 return;
 57             }
 58         }
 59         if(k==2)//转180度
 60         {
 61             flag=0;
 62             for(i=1; i<=n; i++)
 63             {
 64                 for(j=1; j<=n; j++)
 65                     c[n-i+1][n-j+1]=a[i][j];
 66             }
 67             for(i=1; i<=n; i++)
 68             {
 69                 for(j=1; j<=n; j++)
 70                 {
 71                     if(c[i][j]!=b[i][j])
 72                     {
 73                         flag=1;
 74                         break;
 75                     }
 76                 }
 77                 if(flag)
 78                     break;
 79             }
 80             if(i==n+1)
 81             {
 82                 type=k;
 83                 return;
 84             }
 85         }
 86         if(k==3)//转270度
 87         {
 88             flag=0;
 89             for(i=1; i<=n; i++)
 90             {
 91                 for(j=1; j<=n; j++)
 92                     c[i][j]=a[j][n-i+1];
 93             }
 94             for(i=1; i<=n; i++)
 95             {
 96                 for(j=1; j<=n; j++)
 97                 {
 98                     if(c[i][j]!=b[i][j])
 99                     {
100                         flag=1;
101                         break;
102                     }
103                 }
104                 if(flag)
105                     break;
106             }
107             if(i==n+1)
108             {
109                 type=k;
110                 return;
111             }
112         }
113         if(k==4)//反射
114         {
115             flag=0;
116             for(i=1; i<=n; i++)
117             {
118                 for(j=1; j<=n; j++)
119                     c[i][n-j+1]=a[i][j];
120             }
121             for(i=1; i<=n; i++)
122             {
123                 for(j=1; j<=n; j++)
124                 {
125                     if(c[i][j]!=b[i][j])
126                     {
127                         flag=1;
128                         break;
129                     }
130                 }
131                 if(flag)
132                     break;
133             }
134             if(i==n+1)
135             {
136                 type=k;
137                 return;
138             }
139         }
140         if(k==5)//组合
141         {
142             flag=0;
143             for(i=1; i<=n; i++)
144             {
145                 for(j=1; j<=n; j++)
146                     c[i][n-j+1]=a[i][j];
147             }
148             for(i=1; i<=n; i++)
149             {
150                 for(j=1; j<=n; j++)
151                     a[j][n-i+1]=c[i][j];
152             }
153             for(i=1; i<=n; i++)
154             {
155                 for(j=1; j<=n; j++)
156                 {
157                     if(a[i][j]!=b[i][j])
158                     {
159                         flag=1;
160                         break;
161                     }
162                 }
163                 if(flag)
164                     break;
165             }
166             if(i==n+1)
167             {
168                 type=k;
169                 return;
170             }
171             flag=0;
172             for(i=1; i<=n; i++)
173             {
174                 for(j=1; j<=n; j++)
175                     a[n-i+1][n-j+1]=c[i][j];
176             }
177             for(i=1; i<=n; i++)
178             {
179                 for(j=1; j<=n; j++)
180                 {
181                     if(a[i][j]!=b[i][j])
182                     {
183                         flag=1;
184                         break;
185                     }
186                 }
187                 if(flag)
188                     break;
189             }
190             if(i==n+1)
191             {
192                 type=k;
193                 return;
194             }
195             flag=0;
196             for(i=1; i<=n; i++)
197             {
198                 for(j=1; j<=n; j++)
199                     a[i][j]=c[j][n-i+1];
200             }
201             for(i=1; i<=n; i++)
202             {
203                 for(j=1; j<=n; j++)
204                 {
205                     if(a[i][j]!=b[i][j])
206                     {
207                         flag=1;
208                         break;
209                     }
210                 }
211                 if(flag)
212                     break;
213             }
214             if(i==n+1)
215             {
216                 type=k;
217                 return;
218             }
219         }
220         if(k==6)//不改变
221         {
222             flag=0;
223             for(i=1; i<=n; i++)
224             {
225                 for(j=1; j<=n; j++)
226                 {
227                     if(a[i][j]!=b[i][j])
228                     {
229                         flag=1;
230                         break;
231                     }
232                 }
233                 if(flag)
234                     break;
235             }
236             if(i==n+1)
237             {
238                 type=k;
239                 return;
240             }
241         }
242     }
243     if(k==7)//其他
244         type=k;
245 }
246 void output()
247 {
248     printf("%d\n",type);
249 }
250 int main()
251 {
252     input();
253     judge();
254     output();
255     return 0;
256 }

 

posted @ 2015-07-11 10:37  PJQOOO  阅读(423)  评论(0编辑  收藏  举报