Topic Description
Ancient Chinese books have long been recorded.
2 9 4
7 5 3
6 1 8
This is a third-order magic square. Each row, column and diagonal number adds up equally.
Let's consider the opposite question.
Can you fill in the nine palaces with numbers 1 to 9?
Make: Each row, column, and diagonal number is not equal to each other?
That should be possible.
For example:
9 1 2
8 4 3
7 5 6
Your task is to search all third-order anti-magic squares. And count out how many kinds there are altogether.
Rotation or mirroring is the same.
For example:
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
Wait counts as the same situation.
Please submit the total number of third-order anti-magic squares. This is an integer. Don't fill in any redundancy.
public class Main { static int ans = 0; public static void main(String[] args) { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; f(a, 0, a.length - 1); System.out.println(ans / 8); } public static void f(int[] a, int start, int end) { if (start == 6) { int sum1 = a[0] + a[1] + a[2]; int sum2 = a[3] + a[4] + a[5]; if (sum1 == sum2) return; } else if (start == 7) { int sum1 = a[0] + a[1] + a[2]; int sum2 = a[3] + a[4] + a[5]; int sum3 = a[2] + a[4] + a[6]; int sum4 = a[0] + a[3] + a[6]; if (sum1 == sum2 || sum1 == sum3 || sum1 == sum4 || sum2 == sum3 || sum2 == sum4 || sum3 == sum4) return; } else if (start == 8) { int sum1 = a[0] + a[1] + a[2]; int sum2 = a[3] + a[4] + a[5]; int sum3 = a[2] + a[4] + a[6]; int sum4 = a[0] + a[3] + a[6]; int sum5 = a[1] + a[4] + a[7]; int sum6 = a[2] + a[5] + a[8]; int sum7 = a[0] + a[4] + a[8]; int sum8 = a[6] + a[7] + a[8]; if (sum1 == sum2 || sum1 == sum3 || sum1 == sum4 || sum1 == sum5 || sum1 == sum6 || sum1 == sum7 || sum1 == sum8 || sum2 == sum3 || sum2 == sum4 || sum2 == sum5 || sum2 == sum6 || sum2 == sum7 || sum2 == sum8 || sum3 == sum4 || sum3 == sum5 || sum3 == sum6 || sum3 == sum7 || sum3 == sum8 || sum4 == sum5 || sum4 == sum6 || sum4 == sum7 || sum4 == sum8 || sum5 == sum6 || sum5 == sum7 || sum5 == sum8 || sum6 == sum7 || sum6 == sum8 || sum7 == sum8) return; ans++; return; } for (int i = start; i <= end; i++) { { int temp = a[start]; a[start] = a[i]; a[i] = temp; } f(a, start + 1, end); { int temp = a[start]; a[start] = a[i]; a[i] = temp; } } } } // Answer: 3120