• 方格填数


    /*如下的10个格子
       +--+--+--+
       |  |  |  |
    +--+--+--+--+
    |  |  |  |  |
    +--+--+--+--+
    |  |  |  |
    +--+--+--+
    
    填入0~9的数字。要求:连续的两个数字不能相邻。
    (左右、上下、对角都算相邻)
    
    一共有多少种可能的填数方案?
    
    请填写表示方案数目的整数。
    注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。
    1580*/
    package test;
    
    public class 方格填数 {
        static int count = 0;
        
        static void swap(char array[], int a, int b) {  
            char temp = array[a];  
            array[a] = array[b];  
            array[b] = temp;  
        }  
        
        static boolean check(char [] str) {  
            if(check2(str[0], str[1]) && check2(str[0], str[3]) && check2(str[0], str[4]) && check2(str[0], str[5])   
                     && check2(str[1], str[2]) && check2(str[1], str[4]) && check2(str[1], str[5]) && check2(str[1], str[6])  
                     && check2(str[2], str[5]) && check2(str[2], str[6])  
                     && check2(str[3], str[4]) && check2(str[3], str[7]) && check2(str[3], str[8])  
                     && check2(str[4], str[5]) && check2(str[4], str[7]) && check2(str[4], str[8]) && check2(str[4], str[9])  
                     && check2(str[5], str[6]) && check2(str[5], str[8]) && check2(str[5], str[9])  
                     && check2(str[6], str[9]) && check2(str[7], str[8]) && check2(str[8], str[9]))  
                return true;  
            return false;  
        }
        
        static boolean check2(char c, char d) {  
            // TODO Auto-generated method stub  
            if(c == (d+1) || c == (d-1))  
                return false;  
            return true;  
        }
        
        static void permutation(char[] str, int a, int length){  
            if(a == length){  
                if(check(str)){  //检查是否有相邻的连续数字
                    count++;  
                    System.out.println(String.valueOf(str));  
                }  
            }else{  
                for(int i = a; i <= length; ++i){  
                    swap(str, i, a);  
                    permutation(str, a + 1, length);
                    swap(str, a, i);  
                }  
            }  
        }
      
        public static void main(String[] args) {  
            char[] str = "0123456789".toCharArray();  
            permutation(str, 0, 9);  
            System.out.println(count);  
        }  
    }
  • 相关阅读:
    java虚拟机之类加载机制
    java虚拟机之垃圾收集器
    java虚拟机之内存模型
    java基础之NIO
    java基础之字符串
    Integer.valueOf源码分析
    将博客搬至CSDN
    url中向后台传递参数中文乱码
    Layui主窗口和Iframe层参数传递
    百度地图Api 加载海量点
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8612760.html
Copyright © 2020-2023  润新知