我是靠谱客的博主 诚心小蝴蝶,最近开发中收集的这篇文章主要介绍UVA 253 Cube painting(枚举 模拟),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题意:

按如图的顺序给定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个不算太多我就把表打出来了, 其实可以仔细找一下规律, 减少代码量。

代码: 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int dir[24][6] = {{1,2,3,4,5,6},{1,4,2,5,3,6},{1,5,4,3,2,6},{1,3,5,2,4,6},{2,1,4,3,6,5},{2,3,1,6,4,5},{2,6,3,4,1,5},
 4 {2,4,6,1,3,5},{3,1,2,5,6,4},{3,5,1,6,2,4},{3,6,5,2,1,4},{3,2,6,1,5,4},{4,1,5,2,6,3},{4,6,2,5,1,3},{4,2,1,6,5,3},{4,5,6,1,2,3},
 5 {5,1,3,4,6,2},{5,6,4,3,1,2},{5,4,1,6,3,2},{5,3,6,1,4,2},{6,2,4,3,5,1},{6,5,3,4,2,1},{6,3,2,5,4,1},{6,4,5,2,3,1}};
 6 char t[100];
 7 bool judge(int kase)
 8 {
 9     for(int i = 0; i < 6; i++){
10         if(t[i] != t[dir[kase][i] + 5])
11             return false;
12     }
13     return true;
14 }
15 int main()
16 {
17 
18     while(scanf("%s", &t) != EOF){
19         int ok = 0;
20         for(int i = 0; i < 24; i++){
21             if(judge(i)) ok = 1;
22         }
23         printf("%sn", ok? "TRUE":"FALSE");
24     }
25     return 0;
26 }

 

转载于:https://www.cnblogs.com/Jadon97/p/7147173.html

最后

以上就是诚心小蝴蝶为你收集整理的UVA 253 Cube painting(枚举 模拟)的全部内容,希望文章能够帮你解决UVA 253 Cube painting(枚举 模拟)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(72)

评论列表共有 0 条评论

立即
投稿
返回
顶部