标题:六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
用画图做标记, 再用数组存储。
答案:10
#include<iostream>
#include<algorithm>
using namespace std;
int num[12];
bool used[13];
bool ok()
{
int t1 = num[0] + num[2] + num[5] + num[7];
int t2 = num[0] + num[3] + num[6] + num[10];
int t3 = num[7] + num[8] + num[9] + num[10];
int t4 = num[1] + num[2] + num[3] + num[4];
int t5 = num[1] + num[5] + num[8] + num[11];
int t6 = num[4] + num[6] + num[9] + num[11];
//return t1 == t2 == t3 == t4 == t5 == t6; //这样写是错误的, 将得不到真确结果
return t1 == t2 && t2 == t3 && t3 == t4 && t4 == t5 && t5 == t6;
}
void solve(int p)
{
if(p == 11)
{
if(ok())
cout << num[5] << endl;
return;
}
for(int i = 2; i < 13; i++)
{
if(!used[i])
{
num[p] = i;
used[i] = true;
solve(p + 1);
used[i] = false;
}
}
}
int main()
{
num[0] = 1;
num[1] = 8;
num[11] = 3;
used[1] = true;
used[3] = true;
used[8] = true;
solve(2);
}