蓝桥杯java第八届第二题--纸牌三角形
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第八届第二题--纸牌三角形
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
標(biāo)題:紙牌三角形A,2,3,4,5,6,7,8,9 共9張紙牌排成一個(gè)正三角形(A按1計(jì)算)。要求每個(gè)邊的和相等。下圖就是一種排法(如有對齊問題,參看p1.png)。A9 64 83 7 5 2這樣的排法可能會(huì)有很多。如果考慮旋轉(zhuǎn)、鏡像后相同的算同一種,一共有多少種不同的排法呢?請你計(jì)算并提交該數(shù)字。注意:需要提交的是一個(gè)整數(shù),不要提交任何多余內(nèi)容。
解析:
看上去這個(gè)題目可以用搜索的方式全部的搜索,剛開始我想用全排列全部排列一下看看能不能解決,后來發(fā)現(xiàn)并不是很好解決,但是如果用遞歸的話也是可以的,其實(shí)最簡單的就是用循環(huán)了,畢竟是一個(gè)填空題,對于時(shí)間沒有要求,重要的是能把答案算出來。
當(dāng)時(shí)比賽的時(shí)候想了很久怎么來判斷重復(fù)的情況,就是旋轉(zhuǎn)和鏡像后相同的情況,后來自己摸索出來了一種方法,在用循環(huán)解決的時(shí)候可以用,我首先考慮每個(gè)數(shù)都用數(shù)組來裝A[9],每個(gè)位置的一個(gè),然后判斷重復(fù)就是將A[0],A[3],A[6]這三個(gè)數(shù)不同即可,所以在循環(huán)的時(shí)候,A[3]在A[0]的基礎(chǔ)上加一進(jìn)行循環(huán),A[6]在A[3]的基礎(chǔ)上加一進(jìn)行循環(huán),這樣就把這兩種重復(fù)的情況排除了。
方法一:
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的話,后面再寫,如果有什么問題,歡迎指正。。
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯java第八届第二题--纸牌三角形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全排列递归算法详解
- 下一篇: 蓝桥杯java第八届第一题--购物单