/*
* 标题:六角幻方
把 1 2 3 ... 19 共19个整数排列成六角形状,如下:
* * *
* * * *
* * * * *
* * * *
* * *
要求每个直线上的数字之和必须相等。共有15条直线哦!
再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见图【p1.png】,黄色一行为所求。
请你填写出中间一行的5个数字。数字间用空格分开。
这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)
*/
public class Main{
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8,9,11,12,14,16,17,18,19};
f(a,0);
System.out.println("finish!");
}
public static void f(int[] x,int k){
if(k>=x.length){
test(x);
return;
}
for(int i=k;i<x.length;i++){
{int t=x[k];x[k]=x[i];x[i]=t;}
if(k==3){
if(x[0]+x[1]+x[2]+x[3]!=38){
{int t=x[i];x[i]=x[k];x[k]=t;}
continue;
}
}
if(k==8){
if(x[4]+x[5]+x[6]+x[7]+x[8]!=38){
{int t=x[i];x[i]=x[k];x[k]=t;}
continue;
}
}
if(k==12){
if(x[9]+x[10]+x[11]+x[12]!=38){
{int t=x[i];x[i]=x[k];x[k]=t;}
continue;
}
}
if(k==15){
if(x[13]+x[14]+x[15]!=38){
{int t=x[i];x[i]=x[k];x[k]=t;}
continue;
}
}
f(x,k+1);
{int t=x[i];x[i]=x[k];x[k]=t;}
}
}
public static void test(int[] x){
int s1=15+x[0]+x[4];
int s2=13+x[1]+x[5]+x[9];
int s3=10+x[2]+x[6]+x[10]+x[13];
int s4=x[3]+x[7]+x[11]+x[14];
int s5=x[8]+x[12]+x[15];
int s6=10+x[3]+x[8];
int s7=13+x[2]+x[7]+x[12];
int s8=15+x[1]+x[6]+x[11]+x[15];
if(s1==38&&s2==38&&s3==38&&s4==38&&s5==38&&s6==38&&s7==38&&s8==38){
System.out.print("#########");
for(int i=0;i<x.length;i++){
System.out.print(x[i]+" ");
}
System.out.println();
}
// for(int i=0;i<x.length;i++){
// System.out.print(x[i]+" ");
// }
// System.out.println();
}
}
六角幻方
最新推荐文章于 2021-02-16 23:42:04 发布