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

    我国古籍很早就记载着

    2 9 4
    7 5 3
    6 1 8

    这是一个三阶幻方。每行每列以及对角线上的数字相加都相等。

    下面考虑一个相反的问题。
    可不可以用 1~9 的数字填入九宫格。
    使得:每行每列每个对角线上的数字和都互不相等呢?


    这应该能做到。
    比如:
    9 1 2
    8 4 3
    7 5 6

    你的任务是搜索所有的三阶反幻方。并统计出一共有多少种。
    旋转或镜像算同一种。

    比如:
    9 1 2
    8 4 3
    7 5 6

    7 8 9
    5 4 1
    6 3 2

    2 1 9
    3 4 8
    6 5 7

    等都算作同一种情况。

    请提交三阶反幻方一共多少种。这是一个整数,不要填写任何多余内容。
    结果:3120

     全排列,在判断符不符合条件

     1 import java.util.Arrays;
     2 
     3 
     4 public class Main {
     5     static int[][] a;
     6     static boolean[] b;
     7     static int sum;
     8     public static void main(String[] args) {
     9         a = new int[4][4];
    10         b = new boolean[10];
    11         f(1);
    12         System.out.println(sum/8);
    13     }
    14     static void f(int i){
    15         if(i==10){
    16             if(f1()){
    17                 sum++;
    18             }
    19         }
    20         for(int j=1;j<=9;j++){
    21             if(!b[j]){
    22                 b[j] = true;
    23                 a[(i-1)/3+1][(i-1)%3+1] = j;
    24                 f(i+1);
    25                 b[j] = false;
    26             }
    27         }
    28     }
    29     /*
    30      *  9 1 2
    31         8 4 3
    32         7 5 6
    33      * */
    34     static boolean f1(){
    35         
    36         int[] c = new int[9];
    37         c[1] = a[1][1]+a[1][2]+a[1][3];
    38         c[2] = a[2][1]+a[2][2]+a[2][3];
    39         c[3] = a[3][1]+a[3][2]+a[3][3];
    40         c[4] = a[1][1]+a[2][1]+a[3][1];
    41         c[5] = a[1][2]+a[2][2]+a[3][2];
    42         c[6] = a[1][3]+a[2][3]+a[3][3];
    43         c[7] = a[1][1]+a[2][2]+a[3][3];
    44         c[8] = a[1][3]+a[2][2]+a[3][1];
    45         boolean flag = true;
    46         for(int i=1;i<8;i++){
    47             for(int j=i+1;j<=8;j++){
    48                 if(c[i]==c[j]){
    49                     flag = false;
    50                     break;
    51                 }
    52                 }
    53             if(!flag){
    54                 break;
    55             }
    56         }
    57         return flag;
    58     }
    59     
    60 }
  • 相关阅读:
    C++笔记(2018/2/6)
    2017级面向对象程序设计寒假作业1
    谁是你的潜在朋友
    A1095 Cars on Campus (30)(30 分)
    A1083 List Grades (25)(25 分)
    A1075 PAT Judge (25)(25 分)
    A1012 The Best Rank (25)(25 分)
    1009 说反话 (20)(20 分)
    A1055 The World's Richest(25 分)
    A1025 PAT Ranking (25)(25 分)
  • 原文地址:https://www.cnblogs.com/lolybj/p/6883949.html
Copyright © 2011-2022 走看看