第五届_六角填数

来源:互联网 发布:淘宝手机删除评价链接 编辑:程序博客网 时间:2024/05/22 16:43
如图【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;}



0 0
原创粉丝点击