标题:六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
就是一个排列组合问题
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <algorithm>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#define eps 10e-10
using namespace std;
int a[12];
int b[9]={2,4,5,6,7,9,10,11,12};
int visit[9];
int sum=0;
void dfs(int cnt,int *visit,int *a)
{
if(cnt==12)
{
sum++;
int t[6];
t[0]=a[0]+a[3]+a[6]+a[8];
t[1]=a[1]+a[3]+a[4]+a[5];
t[2]=a[0]+a[4]+a[7]+a[11];
t[3]=a[1]+a[6]+a[9]+a[2];
t[4]=a[8]+a[9]+a[10]+a[11];
t[5]=a[2]+a[10]+a[7]+a[5];
if(t[0]==t[1]&&t[0]==t[5]&&t[2]==t[0]&&t[3]==t[0]&&t[4]==t[0])printf("%d\n",a[6]);
return ;
}
for(int i=0;i<9;i++)
{
if(visit[i]==0)
{
a[cnt]=b[i];
visit[i]=1;
dfs(cnt+1,visit,a);
visit[i]=0;
}
}
}
int main(){
a[0]=1;
a[1]=8;
a[2]=3;
memset(visit,0,sizeof(visit));
for(int i=0;i<9;i++)
{
a[3]=b[i];
visit[i]=1;
dfs(4,visit,a);
visit[i]=0;
}
return 0;
}