题面
如下图所示六角形中,填入 1 ~ 12 的数字。使得每条直线上的数字之和都相同。
图中,已经替你填好了 3 个数字,请你计算星号位置所代表的数字是多少?
题解
全排列,枚举
如上图,将其中的空位用蓝色数字编号,则用数组 a[0...8]
来表示这些空位所填数字,则满足要求的 a[3]
即为星号所在位置,我们使用全排列进行枚举 a
数组中每个元素的值,找到满足所有直线的数字都相等就退出枚举,输出答案。
答案:
10
代码
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int a[9] = {2, 4, 5, 6, 7, 9, 10, 11, 12};
do {
int s[6];
s[0] = 8 + a[0] + a[1] + a[2];
s[1] = 8 + a[3] + a[6] + 3;
s[2] = a[2] + a[4] + a[7] + 3;
s[3] = 1 + a[0] + a[3] + a[5];
s[4] = 1 + a[1] + a[4] + a[8];
s[5] = a[5] + a[6] + a[7] + a[8];
bool st = true;
for (int i = 1; i < 6; ++i) {
if (s[i] != s[0]) {
st = false;
break;
}
}
if (st) break;
} while (next_permutation(a, a + 9));
cout << a[3] << endl;
return 0;
}
标题: | 2014年第五届蓝桥杯省赛-G. 六角填数 |
---|---|
链接: | https://www.fightingok.cn/detail/168 |
更新: | 2022-09-18 22:44:51 |
版权: | 本文采用 CC BY-NC-SA 3.0 CN 协议进行许可 |