题意:

按如图的顺序给定2个骰子的颜色(只有r、b、g三种颜色)

问2个骰子是否一模一样

可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子.

分析:

记录一个错误的做法:并不是只要两面两面互相映射, 如rbrggb 与 rgrgbb, 即使 rb 对应 rb、gb 对应 bg、 rg对应rg, 但他们并不是一模一样的骰子。(可以借助真正的骰子旋转尝试一下,就是123456 和 153426, 想象一下2与5互换, 根本不可能从原来的骰子转出来)

正确做法是枚举每一个面向上, 然后分别绕Z轴旋转90度, 每个面有4种情况, 总共24种情况, 再与原来的对应匹配就好, 24个不算太多我就把表打出来了, 其实可以仔细找一下规律, 减少代码量。

代码:

 #include <bits/stdc++.h>
using namespace std;
int dir[][] = {{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},
{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,},{,,,,,}};
char t[];
bool judge(int kase)
{
for(int i = ; i < ; i++){
if(t[i] != t[dir[kase][i] + ])
return false;
}
return true;
}
int main()
{ while(scanf("%s", &t) != EOF){
int ok = ;
for(int i = ; i < ; i++){
if(judge(i)) ok = ;
}
printf("%s\n", ok? "TRUE":"FALSE");
}
return ;
}

最新文章

  1. string常用函数
  2. C#中的匿名方法
  3. SharePoint Server 2016 Update
  4. Autodesk 招人了,开发顾问,感兴趣的或者有推荐的人扔简历过来啊
  5. 正则表达式(.NET)
  6. [.NET]Repeater控件使用技巧
  7. android系统的图片资源
  8. Spring 系列: Spring 框架简介(转载)
  9. Servlet 浅谈(一)
  10. collections模块方法详解
  11. C#中StreamReader读取中文时出现乱码问题总结
  12. FPGA上如何求32个输入的最大值和次大值:分治
  13. Android之自定义AlertDialog和PopupWindow实现(仿微信Dialog)
  14. oracle角色、权限和用户
  15. Windows Server 2012 R2 英文版安装中文语言包教程
  16. dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误
  17. js基础语法之函数
  18. 安装BouncyCastle
  19. Swift语言精要 - 属性
  20. thinkphp前台模版字符串截取

热门文章

  1. mysql 循环批量插入
  2. linux下的日志压缩脚本
  3. Poj 3436 ACM Computer Factory (最大流)
  4. poj 3253 Fence Repair (水哈夫曼树)
  5. 题解报告:hdu 5750 Dertouzos(最大真约数、最小素因子)
  6. Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/jaxen/NamespaceContext
  7. libtool版本过新的问题
  8. Oracle中的日期数据类型
  9. Android学习备忘笺01Activity
  10. mybatis的mapper.xml文件细节