请提交表示方案数目的整数,不要填写任何其它内容。
思路:枚举遍历,我们从上到下依次放倒一个数组里,然后判断即可。
有一点就是,要排除旋转和镜像中重复的,不太明白为什么是除以10。。
求解答~~
package 总决赛; import java.io.*; public class 五星填数 { static int[]n = new int[10]; static int num = 0; static boolean vis[] = new boolean[12]; static boolean is_same(int[]a){ int b[] = new int[5]; b[0] = a[0]+a[2]+a[5]+a[8]; b[1] = a[0]+a[3]+a[6]+a[9]; b[2] = a[1]+a[5]+a[7]+a[9]; b[3] = a[4]+a[6]+a[7]+a[8]; b[4] = a[1]+a[2]+a[3]+a[4]; for(int i=0;i<5;i++) for(int j=i;j<5;j++){ if(b[i] != b[j]) return false; } return true; } static void dfs(int[]a,int d){ if(d >= 10){ if(is_same(a)) num++; return; } for(int i=1;i<=12;i++){//1-12数字 if(i == 7 || i == 11) continue; if(!vis[i-1]){ a[d++] = i; vis[i-1] = true; dfs(a,d); d--; vis[i-1] = false; } } } public static void main(String[] args) { // TODO Auto-generated method stub dfs(new int[10],0); for(int i=0;i<12;i++){ vis[i] = false; } System.out.print(num/10); } }