f(sixleaves) = sixleaves

重剑无锋 大巧不工

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  95 随笔 :: 0 文章 :: 7 评论 :: 0 Trackbacks
/Files/sixleaves/253.pdf 
题目在上面,可以自己下载,这道一开始没什么思路,后来仔细想想,突然有了点灵感,但是还是找不到比较简单的办法
程序还有优化的地步,用到的全局变量有点多。
我的思路是:每个数字都有一个位于Top也就是最顶得时候,只要在这时候,竖直旋转4次,分别判断就可以知道是否存在相同的cube了。
程序主体框架挺清晰的,但是有一点就是下标没处理好,有兴趣的,可以自己统一一下。
by sixleaves
 1 #include <stdio.h>
 2 
 3 //  枚举各个数字位于"上"的一种可能情况
 4 //  该情况下,各个数字所处的位置
 5 int cubeTop[7][7] = {
 6     {0,0,0,0,0,0,0},
 7     {0,1,2,3,4,5,6},
 8     {0,2,6,3,4,1,5},
 9     {0,3,2,6,1,5,4},
10     {0,4,2,1,6,5,3},
11     {0,5,1,3,4,6,2},
12     {0,6,5,3,4,2,1}
13 };
14 
15 
16 int lastCube[7] = {0};
17 int curCube[7] = {0};
18 
19 int isFind;
20 
21 // [0,6)  [6,12)--为另外一个cube
22 char s[15] = {0};
23 void turn();
24 void update();
25 int isSameCube();
26 int main() {
27     
28     while (scanf("%s",s) != EOF) {
29     
30         // 枚举top面数字
31         isFind = 0;
32         for (int i = 1; i <=6; i++) {
33             
34             //  初始化当前筛子
35             for (int k = 1; k <= 6; k++) {
36                 lastCube[k] = curCube[k] = cubeTop[i][k];
37             }
38             
39             // 竖直转动4次筛子
40             for (int j = 0; j < 4; j++) {
41                 
42                 turn();
43                 
44                 if (isSameCube()) {
45                     isFind = 1;
46                     break;
47                 }
48                 
49             }
50             
51             if (isFind) {
52                 break;
53             }
54         }
55         
56         printf( isFind == 1? "TRUE\n" : "FALSE\n");
57         
58     }
59     return 0;
60 }
61 
62 int isSameCube() {
63     
64     //分别比较对应6个面
65     for (int i = 0; i < 6; i++) {
66         if (s[curCube[i + 1] - 1] != s[i + 6])
67             return 0;
68     }
69     return 1;
70 }
71 
72 void turn() {
73     
74     curCube[2] = lastCube[3];
75     curCube[4] = lastCube[2];
76     curCube[5] = lastCube[4];
77     curCube[3] = lastCube[5];
78     //  更新lastCube
79     update();
80 }
81 
82 void update() {
83     
84     lastCube[2] = curCube[2];
85     lastCube[4] = curCube[4];
86     lastCube[5] = curCube[5];
87     lastCube[3] = curCube[3];
88     
89 }
posted on 2015-02-08 01:42 swp 阅读(167) 评论(0)  编辑 收藏 引用 所属分类: algorithm

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理