反幻方
Posted 来一点音乐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反幻方相关的知识,希望对你有一定的参考价值。
我国古籍很早就记载着
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 }
以上是关于反幻方的主要内容,如果未能解决你的问题,请参考以下文章