蓝桥杯试题 历届试题 六角填数

蓝桥杯试题 历届试题 六角填数

使得每条直线上的数字之和都相同。

图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

请通过浏览器提交答案,不要填写多余的内容。

答案
10
在这里插入图片描述
将上面九个空由上到下,由左到右依次编号为a[0]~a[8];
那么*代表就是a[3],用全排列对齐进行排列

#include <iostream>
using namespace std;
#include <algorithm>
int a[9] = {2, 4, 5, 6, 7, 9, 10, 11, 12};
int main()
{
	while (next_permutation(a, a + 9))
	{
		if (8 + a[0] + a[1] + a[2] == a[5] + a[6] + a[7] + a[8] &&
		    a[5] + a[6] + a[7] + a[8] == 1 + a[0] + a[3] + a[5] &&
			1 + a[1] + a[4] + a[8] == 1 + a[0] + a[3] + a[5] &&
			1 + a[0] + a[3] + a[5] == 8 + a[3] + a[6] + 3 &&
			8 + a[3] + a[6] + 3 == 3 + a[2] + a[4] + a[7])
			{
				cout << a[3] << endl;
			}
	}
}

最近发现next_permutation()(但是要事先排好序,这个问题不大,sort函数用起来不也挺香的吗)挺好用的,挺暴力的,哈哈。
用深搜又做了一遍,感觉还是没全排列香啊

#include <iostream>
using namespace std;
#include <string>
#include <algorithm>
int a[9] = {2, 4, 5, 6, 7, 9, 10, 11, 12}, b[9];
int visited[9];//标记
void dfs(int m)
{
	int i;
	if (m == 9)
	{
		if (8 + b[0] + b[1] + b[2] == b[5] + b[6] + b[7] + b[8] &&
		    b[5] + b[6] + b[7] + b[8] == 1 + b[0] + b[3] + b[5] &&
			1 + b[1] + b[4] + b[8] == 1 + b[0] + b[3] + b[5] &&
			1 + b[0] + b[3] + b[5] == 8 + b[3] + b[6] + 3 &&
			8 + b[3] + b[6] + 3 == 3 + b[2] + b[4] + b[7])
			{
				cout << b[3] << endl;
				return ;
			}
	}
	for (i = 0 ; i < 9 ; i++)
	{
		if (!visited[i])
		{
			b[m] = a[i];
			visited[i] = 1;
			dfs(m + 1);
			visited[i] = 0;
		}
	}
}
int main()
{
	dfs(0);
}

如有错误,麻烦指出。谢谢观看!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值