如图【1.png】所示六角形中,填入1~12的数字。使得每条直线上的数字之和都相同。图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
题目分析:我们把各个点编号如下:
题目分析:我们把各个点编号如下:
#include<iostream>
using namespace std;
bool check(int *a,int num) //用于检验a[num]时候与前面的元素是否有相同的值
{
for(int i=num-1;i>=0;i--)
{
if(a[i]==a[num])return false;
}
return true;
}
bool final_check(int *a) //用于检验是否所有直线上的和相等
{
int r1 = a[2]+a[3]+a[4]+a[5];
int r2 = a[8]+a[9]+a[10]+a[11];
int r3 = a[1]+a[3]+a[6]+a[8];
int r4 = a[1]+a[4]+a[7]+a[11];
int r5 = a[5]+a[7]+a[10]+a[12];
if(r1==r2&&r2==r3&&r3==r4&&r4==r5)
return true;
else
return false;
}
void dfs(int *a,int num)
{
if(num==12)
{
a[num] = 3;
if(final_check(a))
cout<<a[6]<<endl;
return;
}
for(int i=2;i<13;i++)
{
a[num] = i;
if(check(a,num))
{
dfs(a,num+1);
}
}
}
int main()
{
int a[13]={3,1,8};//a[0]设置成a[12]的值,因为在num=12时,直接就返回了,为了防止前面出现3所以我们把a[0]设置成3,这样就可以避免
dfs(a,3);
return 0;
}