蓝桥杯 六角填数

标题:六角填数

    如图【1.png】所示六角形中,填入1~12的数字。

    使得每条直线上的数字之和都相同。

    图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

请通过浏览器提交答案,不要填写多余的内容。


蓝桥杯 六角填数_第1张图片

 #include "string.h"
#include "iostream"
using namespace std;


//先把题看成一个数组 A[1]-A[12]
//DFS

int A[15];
bool B[15];
void Judge()
{    
	 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];   
	 int i;
	 for(i=1;i<6;i++)
	 { 
		 if(T[i]!=T[i-1])
		 return;
	 }
     cout<<A[6]<<endl;
	 return ;
}
void Dfs(int x)
{  
	if(x==1 || x==2 || x==12)  //1 2 12 题目已给出值
	Dfs(x+1);

	if(x>12)  //判断是否满足题意
	{
	Judge();
	return ;
	}
 
	int i;
	for(i=1;i<=12;i++)
	{
		if(B[i]==false)      //B[i]为真时,表明值以存在,不在赋值
		{
         A[x]=i;
		 B[i]=true;          
		 Dfs(x+1);
		 B[i]=false;
		}
	}
}
int main()
{
     memset(A,0,sizeof(A));
     memset(B,false,sizeof(B));
	 A[1]=1;A[2]=8;A[12]=3;             //初始化A数组
	 B[1]=true;B[8]=true;B[3]=true;    //因为1 8 3不能赋值 所以 为真
     Dfs(1);
	 
 

	return 0;
}





你可能感兴趣的:(蓝桥杯 六角填数)