第八届蓝桥杯java b组第二题

标题:纸牌三角形

        A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
        下图就是一种排法(如有对齐问题,参看p1.png)。

              A
             9 6
            4   8
           3 7 5 2

        这样的排法可能会有很多。

        如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?

        请你计算并提交该数字。

        注意:需要提交的是一个整数,不要提交任何多余内容。

这题没什么好说的 暴力破解模型 将不同位置的数认为一个排列 然后中间的位置认为相等 然后三处有想好可换

那么最后需要除2和除3

import java.util.Stack;

public class Test2 {
    private static int count=0;
    public static void main(String[] args) {
        Stack<Integer> stack=new Stack<Integer>();
        for(int i=1;i<=9;i++){
            stack.push(i);
            fun(stack);
            stack.pop();
        }
        System.out.println(count/2/3);
    }

    private static void fun(Stack<Integer> stack) {
        if(stack.size()==9){
            int A=stack.get(0);
            int B=stack.get(1);
            int C=stack.get(2);
            int D=stack.get(3);
            int E=stack.get(4);
            int F=stack.get(5);
            int G=stack.get(6);
            int H=stack.get(7);
            int I=stack.get(8);
            int ACEI=A+C+E+I;
            int ABDF=A+B+D+F;
            int FGHI=F+G+H+I;
            if(ACEI==ABDF&&ABDF==FGHI){
                ++count;
                System.out.printf("%d %d %d %d   %d %d %d %d   %d %d %d %d",A,B,D,F,A,C,E,I,F,G,H,I);
                System.out.println();
            }
        }
        for(int j=1;j<=9;j++){
            if(!stack.contains(j)){
                stack.push(j);
                fun(stack);
                stack.pop();
            }
        }
    }

}
View Code

 

posted @ 2018-03-24 22:25  coder-zhou  阅读(298)  评论(0编辑  收藏  举报