规则和6骰子(1)一样。
这个比 6骰子(1) 难好多
玩 6骰子(1) 的时候从头到尾都没有发现一条规则:最后一步只能是通过自动move来实现,而不能是自己选方向
我研究的成果不多,只能给出2种方案
然后今天编程了之后,求出了所有的解。
代码:
#include<iostream> using namespace std; int position = 61; int direction[8] = { -10, 10, -1, 1, -11, -9, 11, 9 }; int number[8][8] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 3, 3, 5, 2, 0, 0, 3, 4, 1, 2, 9, 3, 0, 0, 5, 1, 5, 5, 4, 2, 0, 0, 1, 3, 2, 5, 2, 1, 0, 0, 6, 2, 4, 1, 5, 4, 0, 0, 6, 2, 1, 6, 6, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int i1, i2, i3, i4, i5, i6; int i[7]; bool ok() { int sum = 0; position = 61; i[1] = i1, i[2] = i2, i[3] = i3, i[4] = i4, i[5] = i5, i[6] = i6; while (sum < 36) { int x = position / 10, y = position % 10; if (number[x][y] == 0)return false; if (number[x][y] == 9)return true; position += direction[i[number[x][y]]]; sum++; } return false; } void out() { position = 61; cout << endl; while (true) { int x = position / 10, y = position % 10; cout << position << " "; if (number[x][y] == 9)return; position += direction[i[number[x][y]]]; } } void move() { for (i1 = 0; i1 < 8;i1++) for (i2 = 0; i2 < 8;i2++) for (i3 = 0; i3 < 8;i3++) for (i4 = 0; i4 < 8; i4++) { if (i1 == i2 || i1 == i3 || i1 == i4 || i2 == i3 || i2 == i4 || i3 == i4)continue; for (i5 = 0; i5 < 8; i5++) { if (i1 == i5 || i2 == i5 || i3 == i5 || i4 == i5)continue; for (i6 = 0; i6 < 8; i6++) { if (i1 == i6 || i2 == i6 || i3 == i6 || i4 == i6 || i5 == i6)continue; if (ok())out(); } } } } int main() { move(); cout << "end"; system("pause>nul"); return 0; }
输出:(已经删掉重复的)
61 51 41 32 23 14 25
61 51 41 32 23 14 15 25
61 51 41 32 23 14 24 25
61 62 51 52 41 32 23 14 25
61 51 41 42 31 22 33 24 34 25
61 52 53 43 44 55 66 65 56 46 35 25
61 52 41 31 32 22 33 34 35 46 36 25
61 62 52 42 53 44 33 22 13 24 14 25
61 52 63 64 55 44 33 22 12 13 23 24 35 25
这里面,只有五组是正确的。
一共也就是五组答案,除掉我已经发现的两组,还有下面三组: