您当前的位置: 首页 >  蓝桥杯

不牌不改

暂无认证

  • 0浏览

    0关注

    422博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

蓝桥杯2014年第五届真题-六角填数

不牌不改 发布时间:2022-03-06 17:00:30 ,浏览量:0

题目

如图所示六角形中,填入1~12的数字。

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

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

请通过浏览器提交答案,不要填写多余的内容。 在这里插入图片描述

题解

全排列,暴力。(当然也可以手算)

总共12个数,填好了三个数,还剩九个数。(看到 9 我就想全排啊!!!)

规定从左到右,从上到下每行的空缺位置的索引从0开始增加,如下图:

在这里插入图片描述 索引为3处的值就是我们要填写的值。

我将剩下的九个值进行全排列,对于每一种排列方式,索引为0对应的值就表示在0处填上该值,索引为1对应的值就表示在1处填上该值,……。对于每一种排列方式(也即每一种填法),都判断每条线之和是否相等,如果相等说明我们找到了正确的排列方式(填法),输出索引为3处的值,就是答案。

判断每条线的和是否相等:

8 + a[0] + a[1] + a[2]		// 头朝下三角形的底所在线
8 + a[3] + a[6] + 3 			// 头朝下三角形的左腰所在线
a[2] + a[4] + s[7] + 3		// 头朝下三角形的右腰所在线
a[5] + a[6] + a[7] + a[8]	// 头朝上三角形的底所在线
1 + a[0] + a[3] + a[5]		// 头朝上三角形的左腰所在线
1 + a[1] + a[4] + a[8]		// 头朝上三角形的右腰所在线
代码
#include
using namespace std;
// 1 3 8
// 2 4 5 6 7 9 10 11 12


/*
		O(0)	O(1)	O(2)
	O(3)			O(4)
O(5)	O(5)	O(6)	O(7)
// 括号内为索引 
*/
int s[9] = {2, 4, 5, 6, 7, 9, 10, 11, 12};
int ans;
int main()
{
	do {
		int x1 = 8 + s[0] + s[1] + s[2];
		int x2 = 8 + s[3] + s[6] + 3;
		int x3 = s[2] + s[4] + s[7] + 3;
		int x4 = s[5] + s[6] + s[7] + s[8];
		int x5 = 1 + s[0] + s[3] + s[5];
		int x6 = 1 + s[1] + s[4] + s[8];
		if (x1 == x2 && x2 == x3 && x3 == x4 && x4 == x5 && x5 == x6) 
			cout             
关注
打赏
1662186765
查看更多评论
0.1482s