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

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

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

图中,已经替你填好了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);
}

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

发布了13 篇原创文章 · 获赞 5 · 访问量 491

猜你喜欢

转载自blog.csdn.net/qq_44410340/article/details/104966650
今日推荐