20骰子(2)

智力游戏

规则和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

这里面,只有五组是正确的。

一共也就是五组答案,除掉我已经发现的两组,还有下面三组:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值