蓝桥杯java第八届第二题--纸牌三角形
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第八届第二题--纸牌三角形
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
標題:紙牌三角形A,2,3,4,5,6,7,8,9 共9張紙牌排成一個正三角形(A按1計算)。要求每個邊的和相等。下圖就是一種排法(如有對齊問題,參看p1.png)。A9 64 83 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的話,后面再寫,如果有什么問題,歡迎指正。。
總結
以上是生活随笔為你收集整理的蓝桥杯java第八届第二题--纸牌三角形的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全排列递归算法详解
- 下一篇: 蓝桥杯java第八届第一题--购物单