6骰子(1)

智力游戏




2015年的时候,我就随便点了几下,得到


20166月,我在一定的规则和推理之下,进行了枚举,发现答案应该差不多只有下面这12种情况。


今天,我又编程来枚举所有的答案

代码:

#include<iostream>
using namespace std;

int position = 51;		//position=10*i+j表示的是第i行第j列的位置
int direction[8] = { -10, 10, -1, 1, -11, -9, 11, 9 };	//8个方向,数字代表的是每次移动的时候position的增量
int number[7][7] = {		
	0, 0, 0, 0, 0, 0, 0,		
	0, 1, 3, 6, 5, 9, 0,
	0, 4, 5, 4, 3, 5, 0,
	0, 1, 3, 5, 3, 2, 0,
	0, 2, 1, 5, 3, 4, 0,
	0, 3, 5, 4, 2, 6, 0,
	0, 0, 0, 0, 0, 0, 0 };

int i1, i2, i3, i4, i5, i6;
int i[7];

bool ok()
{
	int sum = 0;
	position = 51;
	i[1] = i1, i[2] = i2, i[3] = i3, i[4] = i4, i[5] = i5, i[6] = i6;
	while (sum < 25)
	{
		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 = 51;
	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;
} 

输出的有重复的,利用word的查找和替换功能可以轻松找出所有的不同的行,如下

51  42  32  23  24  15
51  42  32  23  34  25  24  15
51  42  43  32  23  13  24  15
51  42  43  33  23  34  25  15
51  42  53  43  44  35  24  15
51  42  32  23  33  44  35  24  15
51  42  52  53  43  44  35  24  15
51  41  32  22  23  34  24  14  15
51  42  32  23  34  25  35  24  15
51  41  52  53  44  34  24  14  15
51  42  53  54  44  35  25  24  15
51  42  53  54  43  33  23  24  15
51  52  42  33  23  34  35  24  25  15
51  41  52  53  42  33  34  24  14  15
51  52  42  33  23  12  13  24  25  15
51  41  32  22  23  33  34  24  14  15
51  42  32  23  22  33  44  35  24  15
51  52  42  33  23  22  12  13  24  25  15
51  52  42  41  32  33  23  12  13  24  25  15

一共有19种

我验证了一下,这19组全部是正确的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值