Problem:
下图所示六角星中,填入 1 ~ 12 的数字(每个数字只能出现一次),使得每条直线上的数字之和都相同。
现在将六角星按照从上到下,从左到右的顺序标记位置。
每种情况会给你第 1 个位置、第 2 个位置、第 12 个位置对应的数字,及一个星号的位置,请你求出星号位置所代表的数字是多少。
这是编号方式:
1
2 3 4 5
6 7
8 9 10 11
12
(这里本来有一张图片的,但加载不出来)
第一行 3 个数字 n,m,k,表示第 1 个位置的数字是 n,第 2 个位置的数字是 m,第 12 个位置的数字是 k。
第二行,一个数字 j,第 j 个位置是星号位置。
星号位置正确填放的数值。
1 8 3
6
10
Code:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
int a, b, c, d, cnt, num[10];
bool check()
{
bool ans1 = (a + num[1] + num[4] + num[8] == 26);
bool ans2 = (a + num[0] + num[3] + num[5] == 26);
bool ans3 = (b + num[0] + num[1] + num[2] == 26);
bool ans4 = (b + num[3] + num[6] + c == 26);
bool ans5 = (c + num[7] + num[4] + num[2] == 26);
bool ans6 = (num[5] + num[6] + num[7] + num[8] == 26);
return ans1 && ans2 && ans3 && ans4 && ans5 && ans6;
}
int main()
{
cin >> a >> b >> c >> d;
for (int i = 1; i <= 12; i++)
{
if (i != a && i != b && i != c)
num[cnt++] = i;
}
do
{
if (check())
break;
} while (next_permutation(num, num));
cout << num[d] << endl;
return 0;
}