标题:纸牌三角形
A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
下图就是一种排法(如有对齐问题,参看p1.png)。
A
9 6
4 8
3 7 5 2
这样的排法可能会有很多。
如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
请你计算并提交该数字。
注意:需要提交的是一个整数,不要提交任何多余内容。
package 第五次模拟测试;
public class 纸牌三角形 {
static int arr[]=new int[10];
static boolean vis[]=new boolean[10];
static int sum=0;
static void dfs(int step) {
if(step==10)
{
if(arr[1]+arr[2]+arr[3]+arr[4]==arr[4]+arr[5]+arr[6]+arr[7]&&
arr[7]+arr[8]+arr[9]+arr[1]==arr[4]+arr[5]+arr[6]+arr[7])
sum++;
return;
}
for(int i=1;i<=9;i++)
{
if(!vis[i]) {
vis[i]=true;
arr[step]=i;
dfs(step+1);
vis[i]=false;
}
}
}
public static void main(String[] args) {
dfs(1);
System.out.println(sum/6);//这里其实是count/3/2,除以3是排除了旋转,除以2是排除了镜像
}
}
纸牌三角形
可以用数组表示,分别表示为三条边 arr[1]+arr[2]+arr[3]+arr[4]
arr[7]+arr[8]+arr[9]+arr[1]
arr[4]+arr[5]+arr[6]+arr[7]
判断是否相等,注意镜像和旋转
所以总和要/6