标题:六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
简单的枚举排列,只要提前将12个结点标号,来判断六个线段总和是否相等。
答案是 10 (num[7]这是我标定的序号)
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 13
int num[MAXN];
int used[MAXN];
bool flag=false;
using namespace std;
void dfs(int cur)
{
int i,j;
bool ok;
if(cur==)
{
if(num[]+num[]+num[]+num[]==num[]+num[]+num[]+num[]&&num[]+num[]+num[]+num[]==num[]+num[]+num[]+num[]&&num[]+num[]+num[]+num[]==num[]+num[]+num[]+num[]&&num[]+num[]+num[]+num[]==num[]+num[]+num[]+num[]&&num[]+num[]+num[]+num[]==num[]+num[]+num[]+num[])
{
for(i=;i<=;i++)
cout<<num[i]<<endl;
flag=true;
}
}
for(i=;i<=;i++)
{
ok=true;
for(j=;j<=cur-;j++)
{
if(used[i]||num[j]==i)
ok=false;
}
if(ok)
{
num[cur]=i;
used[i]=;
dfs(cur+);
}
if(flag)
return;
used[i]=;
}
}
int main()
{
memset(used,,sizeof(used));
used[]=;
used[]=;
used[]=;
num[]=;
num[]=;
num[]=;
dfs();
return ;
}