题目描述

一块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

说明

题目翻译来自NOCOW。

这个题其实可以输入循环中就能把答案求出来,但是因为这个题比较简单,为了复习一下函数传二维数组的方法。比较好写,写一个旋转90°的函数,180就是旋转两次,270就是3次。然后镜像什么的再求也就容易很多。

下面是AC代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
char ob[11][11];
char ob2[11][11];
char obj1[11][11];
char obj2[11][11];
char obj3[11][11];
char obj4[11][11];
char obj5[11][11];
char obj6[11][11];
char obj7[11][11];
int n;
void zh(char a[][11],char b[][11]);
bool db(char a[][11],char b[][11]);
int main()
{
scanf("%d",&n);
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
scanf(" %c",&ob[i][j]);
obj4[i][n+1-j]= ob[i][j];
}
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
scanf(" %c",&ob2[i][j]);
zh(ob,obj1);
zh(obj1,obj2);
zh(obj2,obj3);
zh(obj4,obj5);
zh(obj5,obj6);
zh(obj6,obj7);
if(db(ob2,obj1) )cout<<1<<endl;
else if(db(ob2,obj2) )cout<<2<<endl;
else if(db(ob2,obj3) )cout<<3<<endl;
else if(db(ob2,obj4) )cout<<4<<endl;
else if(db(ob2,obj5) )cout<<5<<endl;
else if( db(ob2,obj6) )cout<<5<<endl;
else if( db(ob2,obj7) )cout<<5<<endl;
else if(db(ob2,ob) )cout<<6<<endl;
else cout<<7<<endl;
return 0;
} void zh(char a[][11],char b[][11])
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
b[i][j]=a[n+1-j][i];
}
}
bool db(char a[][11],char b[][11])
{
for(int i=1; i<=n; i++)
for(int j=1; j<=n; j++)
{
if(b[i][j]!=a[i][j])
return 0;
}
return 1;
}

最新文章

  1. DELL服务器引导光盘图片及下载链接
  2. 22行Python代码实现 单词纠错
  3. firework便捷截LOGO
  4. js事件源window.event.srcElement兼容性写法
  5. flask学习
  6. 我的第一个javascript网页作业
  7. 2016 系统设计第一期 (档案一)MVC form数据提交
  8. android ORMlite的应用
  9. 《JavaScript核心概念》基础部分重点摘录
  10. Using Apache2 with JBoss AS7 on Ubuntu
  11. 详解Java的自动装箱与拆箱(Autoboxing and unboxing)
  12. linux命令排序
  13. Atitit php java python nodejs错误日志功能的比较
  14. 『Python CoolBook』Cython
  15. 《Linux内核》第七周 进程的切换和系统的一般执行过程 20135311傅冬菁
  16. plsql快速入门
  17. NYOJ 252 01串 普通dp
  18. Generating an arbitrary digit password dictionary
  19. 都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事
  20. pycharm自定义代码片段

热门文章

  1. coding++:java 线程池概述
  2. 盘点一下Github上开源的编程面试/学习相关的仓库
  3. mvc传递json数据到view简单实例
  4. 把川普射上太阳—如何用python制作小游戏
  5. 学习JVM参数前必须了解的
  6. 史上最详细的VM虚拟机安装Kali-linux教程(以2020.1版本为例,含下载地址+默认提升为root权限)
  7. 前端学习笔记-JavaScript
  8. 百度智能云虚拟主机 Typecho 分类功能失效 | 开启伪静态地址
  9. 干货最实用的 Python 多线程代码框架
  10. pytorch seq2seq闲聊机器人beam search返回结果