标题:五星填数


如【图1.png】的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。

如图就是恰当的填法。

请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。

请提交表示方案数目的整数,不要填写任何其它内容。

旋转有5种,每个旋转的镜像有2种,所以最后除以5*2

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 class Main{
 5     static boolean[] b;
 6     static int[] a;
 7     static int sum;
 8     public static void main(String[] args) {
 9         b = new boolean[13];
10         b[7] = true;
11         b[11] = true;
12         a = new int[11];
13         f(1);
14         System.out.println(sum/10);
15     }
16     public static void f(int h){
17         if(h>10){
18             if(f1()){
19                 sum++;
20                 //System.out.println(Arrays.toString(a));
21             }
22             return ;
23         }
24         for(int j=1;j<=12;j++){
25             if(!b[j]){
26                 b[j] = true;
27                 a[h] = j;
28                 f(h+1);
29                 b[j] = false;
30             }
31         }
32     }
33     /* 1
34      * 2 3 4 5
35      * 6 7
36      * 8
37      * 9 10
38      * */
39     public static boolean f1(){
40         int a1 = a[1]+a[3]+a[6]+a[9];
41         int a2 = a[1]+a[4]+a[7]+a[10];
42         int a3 = a[2]+a[3]+a[4]+a[5];
43         int a4 = a[2]+a[6]+a[8]+a[10];
44         int a5 = a[5]+a[7]+a[8]+a[9];
45         if(a1==a2&&a1==a3&&a1==a4&&a1==a5){
46             //System.out.println(a1+" "+a2+" "+a3+" "+a4+" "+a5+" ");
47             return true;
48         }else{
49             return false;
50         }
51         }
52     
53 }
原文地址:https://www.cnblogs.com/lolybj/p/6828557.html