标题:六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
简单搜索即出结果。
如图,星号所在为 10
#include <cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int num[15],have[15];
int allClear()//1 -12 所有数字都已经使用
{
for(int i=1; i<=12; i++)
if(have[i]==0)
return 0;
return 1;
}
void check()
{
int a=num[1]+num[2]+num[4]+num[5];
int b=num[11]+num[12]+num[2]+num[3];
int c=num[9]+num[8]+num[6]+num[5];
int d=num[1]+num[12]+num[10]+num[9];
int e=num[3]+num[4]+num[6]+num[7];
if(a==b&&b==c&&c==d&&d==e&&num[1]==1&&num[7]==3&&num[11]==8)
{
cout<<"ooooooooooooooooooooooooooooo"<<endl;
for(int j=1; j<=12; j++)
{
cout<<num[j]<<" ";
}
cout<<endl<<"ooooooooooooooooooooooooooooo"<<endl;
}
}
void dfs(int now,int all)
{
if(all>12)
{
return;
}
if(all==12)//所有数字已经填满
{
if(allClear()) //不重复
{
//还要判断每条线和是否相同
check();
}
}
for(int i=1; i<=12; i++)
{
if(have[i]==0)//没有用过
{
num[now]=i;
have[i]=1;
dfs(now+1,all+1);
have[i]=0;
}
}
}
int main()
{
memset(have,0,sizeof(have));
dfs(1,0);
return 0;
}