蓝桥杯java第八届第二题--纸牌三角形

		标题:纸牌三角形
		
		A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。
		下图就是一种排法(如有对齐问题,参看p1.png)。
		
		      A
		     9 6
		    4   8
		   3 7 5 2
		
		这样的排法可能会有很多。
		
		如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢?
		
		请你计算并提交该数字。
		
		注意:需要提交的是一个整数,不要提交任何多余内容。

解析:
看上去这个题目可以用搜索的方式全部的搜索,刚开始我想用全排列全部排列一下看看能不能解决,后来发现并不是很好解决,但是如果用递归的话也是可以的,其实最简单的就是用循环了,毕竟是一个填空题,对于时间没有要求,重要的是能把答案算出来。
当时比赛的时候想了很久怎么来判断重复的情况,就是旋转和镜像后相同的情况,后来自己摸索出来了一种方法,在用循环解决的时候可以用,我首先考虑每个数都用数组来装A[9],每个位置的一个,然后判断重复就是将A[0],A[3],A[6]这三个数不同即可,所以在循环的时候,A[3]在A[0]的基础上加一进行循环,A[6]在A[3]的基础上加一进行循环,这样就把这两种重复的情况排除了。

方法一:

    static int[] first = new int[9];  
    static int[] s = new int[9];  
    static int sum = 0;  
    public static void main(String[] args) {  
        sousuo(0);  
        System.out.println(sum/6);  
    }  
    public static void sousuo(int code){  
        if(code==9){  
            if(s[0]+s[1]+s[3]+s[5]==s[0]+s[2]+s[4]+s[8]&&s[0]+s[1]+s[3]+s[5]==s[5]+s[6]+s[7]+s[8])  
                sum++;  
            return;  
        }  
        for (int i = 0; i < 9; i++) {  
            if(first [i]==0){  
                first [i] = 1;  
                s[code] = i+1;  
                sousuo(code+1);  
                first [i] = 0;  
            }  
        }  
    }  

答案:144

还有方法2的话,后面再写,如果有什么问题,欢迎指正。。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hello-java-maker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值