zoukankan      html  css  js  c++  java
  • 反幻方

    /*我国古籍记载着
     * 294
     * 753
     * 618
     * 这是一个三阶幻方。每行每列以及对角线上的数字相加都相等
     * 考虑一个相反问题
     * 用1-9的数字填入九宫格使得每行每列对角线上数字和都不相等,搜索所有的三阶反幻方并统计一共有多少种,旋转或镜像算一种*/
    package test;
    
    public class 反幻方 {
        static int count=0;
        static void swap(char[] s,int a,int b){
            char temp=s[a];
            s[a]=s[b];
            s[b]=temp;
        }
        public static void dsf(char[] arr,int k,int length){//用k记录当前遍历到的数字位数
            if(k==length){//若填入九宫格使得每行每列对角线上数字和都不相等,则count++;
                if(arr[0]+arr[1]+arr[2]!=arr[3]+arr[4]+arr[5]&&arr[0]+arr[1]+arr[2]!=arr[6]+arr[7]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[3]+arr[0]+arr[6]&&arr[0]+arr[1]+arr[2]!=arr[1]+arr[4]+arr[7]&&arr[0]+arr[1]+arr[2]!=arr[5]+arr[2]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[0]+arr[4]+arr[8]&&arr[0]+arr[1]+arr[2]!=arr[2]+arr[4]+arr[6])  
                    if(arr[3]+arr[4]+arr[5]!=arr[6]+arr[7]+arr[8]&&arr[3]+arr[4]+arr[5]!=arr[0]+arr[3]+arr[6]&&arr[3]+arr[4]+arr[5]!=arr[1]+arr[4]+arr[7]&&arr[3]+arr[4]+arr[5]!=arr[2]+arr[8]+arr[5]&&arr[3]+arr[4]+arr[5]!=arr[0]+arr[4]+arr[8]&&arr[3]+arr[4]+arr[5]!=arr[2]+arr[4]+arr[6])  
                        if(arr[6]+arr[7]+arr[8]!=arr[0]+arr[3]+arr[6]&&arr[6]+arr[7]+arr[8]!=arr[1]+arr[4]+arr[7]&&arr[6]+arr[7]+arr[8]!=arr[2]+arr[8]+arr[5]&&arr[6]+arr[7]+arr[8]!=arr[0]+arr[4]+arr[8]&&arr[6]+arr[7]+arr[8]!=arr[2]+arr[4]+arr[6])  
                            if(arr[0]+arr[3]+arr[6]!=arr[1]+arr[4]+arr[7]&&arr[0]+arr[3]+arr[6]!=arr[2]+arr[8]+arr[5]&&arr[0]+arr[3]+arr[6]!=arr[0]+arr[4]+arr[8]&&arr[0]+arr[3]+arr[6]!=arr[2]+arr[4]+arr[6])  
                                if(arr[1]+arr[4]+arr[7]!=arr[2]+arr[8]+arr[5]&&arr[1]+arr[4]+arr[7]!=arr[0]+arr[4]+arr[8]&&arr[1]+arr[4]+arr[7]!=arr[2]+arr[4]+arr[6])  
                                    if(arr[2]+arr[5]+arr[8]!=arr[0]+arr[4]+arr[8]&&arr[2]+arr[5]+arr[8]!=arr[2]+arr[4]+arr[6])  
                                        if(arr[0]+arr[4]+arr[8]!=arr[2]+arr[4]+arr[6])  
                                            count++;
                return;
            }
            for(int i=k;i<=length;i++){//每次递归从当前位数向后递归
                swap(arr,i,k);
                dsf(arr,k+1,length);
                swap(arr,i,k);
                
            }
        }
        public static void main(String arg[]){
            char[] arr="123456789".toCharArray();
            dsf(arr,0,8);//使用数组来表示九宫格,搜索范围从0-8共9个数
            System.out.print(count/8);//除去旋转(4)和镜像(2),2*4=8
        }
    
    }
  • 相关阅读:
    分布式事务的MQ实现
    zipkin 介绍入门
    线程5问?
    微服务分布式系统架构,转载,备份
    微服务,分布式架构
    史上最全 40 道 Dubbo 面试题及答案,看完碾压面试官!
    Tomcat优化
    windows 下安装kafka
    经典台词
    分布式锁3种实现
  • 原文地址:https://www.cnblogs.com/ljs-666/p/8612775.html
Copyright © 2011-2022 走看看