• 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("%s
    ", ok? "TRUE":"FALSE");
    24     }
    25     return 0;
    26 }
  • 相关阅读:
    用简单的方法解决问题
    记一次调试
    工作笔记还是蛮有用
    35岁往上做什么
    2013年个人总结
    一个C++宏定义与枚举定义重复的编译错误
    动态库的麻烦之处
    谈谈软件项目的dependency
    创建pathing jar
    谈谈patch strategy
  • 原文地址:https://www.cnblogs.com/Jadon97/p/7147173.html
Copyright © 2020-2023  润新知