头像

Cyan

四川成都

深度强化学习炼丹师

2014年第五届蓝桥杯省赛-G. 六角填数

2014年第五届蓝桥杯省赛-G. 六角填数

2021-12-13 · 69次阅读 · 原创 · 数据结构与算法

原题链接

题面

如下图所示六角形中,填入 1 ~ 12 的数字。使得每条直线上的数字之和都相同。

六角形

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

题解

全排列,枚举

image-20211212145921228

如上图,将其中的空位用蓝色数字编号,则用数组 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 协议进行许可