# 六角填数 ![图片说明](https://img-ask.csdn.net/upload/202006/14/1592104139_240178.png) **题目描述** 如下图所示六角形中,有12个点,依次填入1~12的数字,使得每条直线上的数字之和都相同。其中,已经替你填好了点1,2,3的数字,请你计算其他位置所代表的数字是多少? **输入** 输入仅一行,以空格隔开,分别表示已经填好的点1,2,3的数字。 **输出** 输出仅一行,以空格隔开,分别表示所有位置所代表的数字。 **样例输入:** ```json 1 8 2 ``` **样例输出:** ```json 1 8 2 9 7 11 10 12 3 5 6 4 ``` 以下程序实现了这一功能,请你填补空白处的内容: ```cpp #include #include #include #include using namespace std; #define eps 10e-10 #define N 15 int a[N]; bool vis[N]; void dfs(int x) { if (x == 1 || x == 2 || x == 3) { dfs(x + 1); return; } if (x > 12) { int t[6]; t[0] = a[1] + a[3] + a[6] + a[8]; t[1] = a[1] + a[4] + a[7] + a[11]; t[2] = a[2] + a[3] + a[4] + a[5]; t[3] = a[2] + a[6] + a[9] + a[12]; t[4] = a[8] + a[9] + a[10] + a[11]; t[5] = a[12] + a[10] + a[7] + a[5]; for (int i = 1; i < 6; ++i) { if (t[i] != t[i - 1]) return; } for (int i = 1; i <= 12; i++) cout << a[i] << " "; return; } for (int i = 1; i < 13; ++i) { ________________ } } int main() { memset(vis, 0, sizeof(vis)); cin >> a[1]; vis[a[1]] = 1; cin >> a[2]; vis[a[2]] = 1; cin >> a[3]; vis[a[3]] = 1; dfs(1); return 0; } ``` ## template ```cpp #include #include #include #include using namespace std; #define eps 10e-10 #define N 15 int a[N]; bool vis[N]; void dfs(int x) { if (x == 1 || x == 2 || x == 3) { dfs(x + 1); return; } if (x > 12) { int t[6]; t[0] = a[1] + a[3] + a[6] + a[8]; t[1] = a[1] + a[4] + a[7] + a[11]; t[2] = a[2] + a[3] + a[4] + a[5]; t[3] = a[2] + a[6] + a[9] + a[12]; t[4] = a[8] + a[9] + a[10] + a[11]; t[5] = a[12] + a[10] + a[7] + a[5]; for (int i = 1; i < 6; ++i) { if (t[i] != t[i - 1]) return; } for (int i = 1; i <= 12; i++) cout << a[i] << " "; return; } for (int i = 1; i < 13; ++i) { if (!vis[i]) { vis[i] = 1; a[x] = i; dfs(x + 1); vis[i] = 0; } } } int main() { memset(vis, 0, sizeof(vis)); cin >> a[1]; vis[a[1]] = 1; cin >> a[2]; vis[a[2]] = 1; cin >> a[3]; vis[a[3]] = 1; dfs(1); return 0; } ``` ## 答案 ```cpp if (!vis[i]) { vis[i] = 1; a[x] = i; dfs(x + 1); vis[i] = 0; } ``` ## 选项 ### A ```cpp if (!vis[i]) { vis[i] = 1; a[x] = i; dfs(x - 1); vis[i] = 0; } ``` ### B ```cpp if (!vis[i]) { vis[i] = 0; a[x] = i; dfs(x + 1); vis[i] = 1; } ``` ### C ```cpp if (!vis[i]) { vis[i] = 0; a[x] = i + 1; dfs(x + 1); vis[i] = 1; } ```