六角幻方

/*
 * 标题:六角幻方
    把 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();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值