六角填数
如图【1.png】所示六角形中,填入1~12的数字。
使得每条直线上的数字之和都相同。
图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?
请通过浏览器提交答案,不要填写多余的内容。
答案:10
题解:
全排列或者暴力。。。。
代码:
第一种方法:
全排列
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int a[12]={1,8,2,4,5,6,7,9,10,11,12,3};
int t[6];
void display(){
int i;
for(i=0;i<12;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
bool judge(){
int i;
t[0]=a[0]+a[2]+a[5]+a[7];
t[1]=a[7]+a[8]+a[9]+a[10];
t[2]=a[0]+a[3]+a[6]+a[10];
t[3]=a[1]+a[2]+a[3]+a[4];
t[4]=a[1]+a[5]+a[8]+a[11];
t[5]=a[5]+a[6]+a[9]+a[11];
for(i=0;i<4;i++){
if(t[i]!=t[i+1])return false;
}
return true;
}
int main(){
while(next_permutation(a+2,a+11)){
if(judge()){
display();
cout<<a[5]<<endl;
}
}
return 0;
}
第二种方法:
暴力
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
for(int a=2;a<=12;a++)
for(int b=2;b<=12;b++)
if(a!=b){
for(int c=2;c<=12;c++)
if(a!=c&&b!=c){
for(int d=2;d<=12;d++)
if(a!=d&&b!=d&&c!=d){
for(int e=2;e<=12;e++)
if(a!=e&&b!=e&&c!=e&&d!=e){
for(int f=2;f<=12;f++)
if(a!=f&&b!=f&&c!=f&&d!=f&&f!=e){
for(int g=2;g<=12;g++)
if(a!=g&&b!=g&&c!=g&&d!=g&&e!=g&&f!=g){
for(int h=2;h<=12;h++)
if(a!=h&&b!=h&&c!=h&&d!=h&&e!=h&&f!=h&&g!=h){
for(int i=2;i<=12;i++){
if(a!=i&&b!=i&&c!=i&&d!=i&&e!=i&&f!=i&&g!=i&&h!=i){
int A=8+a+b+3;
int B=g+f+d+3;
int C=1+i+a+c;
int D=1+h+f+e;
int E=8+i+h+g;
int F=c+b+d+e;
if(a!=3 && a!=8 && b!=3 && b!=8 && c!=3 && c!=8 && d!=3 && d!=8 && e!=3 && e!=8 && f!=3 && f!=8 && g!=3 && g!=8 && h!=3 && h!=8 && i!=3 && i!=8)
{
if(A==B && B==C && C==D &&D==E && E==F)
printf("%d %d %d %d %d %d %d %d %d %d\n",A,a,b,c,d,e,f,g,h,i);//输出直线上的和,其他9个数字
}
}
}
}
}
}
}
}
}
}
return 0;
}