zoukankan      html  css  js  c++  java
  • 六角幻方

    /*把 1 2 3 ... 19 共19个整数排列成六角形状,如下:
    
        * * *
    
       * * * *
    
      * * * * *
    
       * * * *
    
        * * *
    
        要求每个直线上的数字之和必须相等。共有15条直线哦!
    
        再给点线索吧!我们预先填好了2个数字,第一行的头两个数字是:15 13,参见下图,黄色一行为所求。
    
       请你填写出中间一行的5个数字。数字间用空格分开。
    
       这是一行用空格分开的整数,请通过浏览器提交答案,不要填写任何多余的内容(比如说明性的文字等)*/
    package test;
    
    public class 六角幻方 {
    static int[] table = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};  
        
        public static void main(String[] args){  
            int arr[] = new int[16];  
            boolean[] vis = new boolean[20];  
            vis[15] = vis[13] = vis[10] = true; //根据初始条件推出第一行的三个数,标记为使用过的 
            dfs(arr,0,vis);  
        }  
          
        static void dfs(int[] arr,int step, boolean[] vis){  //arr数组记录从第二行开始的数,step记录当前遍历的步数
            if(step == 4){  
                if(arr[0]+arr[1]+arr[2]+arr[3] != 38)  //五层要相等,(1+...+19)/5= 38,注意可判断的点
                    return ;  
            }else if(step == 5){  
                if(15+arr[0]+arr[4] != 38)  
                    return ;  
            }else if(step == 9){  
                if(arr[4]+arr[5]+arr[6]+arr[7]+arr[8] != 38 ||   
                        10+arr[3]+arr[8] != 38)  
                    return ;  
            }else if(step == 10){  
                if(13+arr[1]+arr[5]+arr[9] != 38)  
                    return ;  
            }else if(step == 13){  
                if(arr[9]+arr[10]+arr[11]+arr[12] != 38 ||  
                        13+arr[2]+arr[7]+arr[12] != 38)  
                    return ;  
            }else if(step == 14){  
                if(10+arr[2]+arr[6]+arr[10]+arr[13] != 38 ||  
                        arr[4]+arr[9]+arr[13] != 38)  
                    return ;  
            }  
            else if(step == 15){  
                if(arr[0]+arr[5]+arr[10]+arr[14] != 38 ||  
                        arr[3]+arr[7]+arr[11]+arr[14] != 38)  
                    return ;  
            }  
            else if(step == 16){  
                if(arr[13]+arr[14]+arr[15] != 38 ||  
                        15+arr[1]+arr[6]+arr[11]+arr[15] != 38 ||  
                        arr[8]+arr[12]+arr[15] != 38)  
                    return ;  
                print(arr);  
            }  
            for(int i = 0; i < table.length; ++i){  
                if(vis[table[i]] == false){  //如果该数未使用过,则使用arr数组记录下当前使用的数字
                    vis[table[i]] = true;  
                    arr[step] = table[i];  
                    dfs(arr,step+1,vis);  
                    vis[table[i]] = false;  
                }  
            }  
        }  
          
        static void print(int[] arr){  
            for(int i = 0; i < arr.length; ++i){  
                System.out.print(arr[i]+" ");  
            }  
            System.out.println();  
        }
    
    }
  • 相关阅读:
    人工智能 tensorflow框架-->简介及安装01
    【亲测】自动构建多个指定的class并发执行:Jenkins+Maven+Testng框架
    【亲测】Appium测试Android混合应用时,第二次切换到WebView失败
    appium_v1.4.16版本自动化适配android7.0系统
    python之拆包与装包
    python3之线程
    python3之进程
    python3之tcp
    python3之udp
    python3面向对象(4)之__new__方法和__init__方法
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8595616.html
Copyright © 2011-2022 走看看