[蓝桥杯2015决赛]五星填数
题目描述
如图的五星图案节点填上数字:1~12,除去7和11。
要求每条直线上数字和相等。
如图就是恰当的填法。
请你利用计算机搜索所有可能的填法有多少种。
注意:旋转或镜像后相同的算同一种填法。
输出
请提交表示方案数目的整数,不要填写任何其它内容。
package oj;
import java.util.Scanner;
public class Main {
static int[] arr= {1,2,3,4,5,6,8,9,10,12};
static int[] vis = new int[10];
static int[] res = new int[10];
static int cnt = 0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
dps(0);
System.out.println(cnt/10);
}
static void dps(int i) {
if(i==10) {
if(test()) {
cnt++;
}
}else {
for(int j = 0; j < 10; j++) {
if(vis[j]==0) {
res[i] = arr[j];
vis[j] = 1;
dps(i+1);
vis[j] = 0;
}
}
}
}
static boolean test() {
int sum = res[0]+res[2]+res[5]+res[8];
int s = res[1]+res[2]+res[3]+res[4];
if(s!=sum)
return false;
s = res[0]+res[3]+res[6]+res[9];
if(s!=sum)
return false;
s = res[1]+res[5]+res[7]+res[9];
if(s!=sum)
return false;
s = res[4]+res[6]+res[7]+res[8];
if(s!=sum)
return false;
return true;
}
}
枚举+除重
旋转:5个角都可以旋转,所以除以5
镜像:左右翻转同一种效果,所以除以2
2021-01-25