你在生活中用過最高階的演算法知識是什麼?
寫程式輔助自己玩歡樂鬥牛,先看四張牌然後幾秒內決定搶莊的那種,後來還把它出成了一道題。
列舉最後一張牌,計算我自己定義的期望得分,根據分數高低決定搶莊。
效果很不錯,從頭開始一小時贏了幾十萬歡樂豆。
後來在高倍場的某次對局中發現期望得分很高,果斷搶了莊,但是閒家3個“牛牛”,瞬間輸光。
以下是完整題目:
歡樂鬥牛
「題目背景」
為了更快的獲取歡樂豆,hzwer準備去玩歡樂鬥牛,但是由於人品太差,在一個小時之內輸光了20個QQ號的歡樂豆(每天系統會贈送每個號4000歡樂豆)。第二天他準備繼續再戰歡樂鬥牛的搶莊模式,但是由於缺乏思考能力,需要編寫一個程式來決定是否搶莊。
「題目描述」
在玩家決定是否搶莊之前,系統會下發四張牌稱為底牌,最後一張牌在決定後發放,每張牌可能為1-10,J,Q,K,hzwer認為最後一張牌為每一種點數的機率是相同的,對於一個由五張牌組成的牌型,分數計算規則如下,請你得出底牌的期望得分。
首先注意:在鬥牛中,J,Q,K的點數視為10點,即11,12,13在計算頭或點數時均視為10,所有牌無視其花色。
首先考慮特殊牌型
四炸——即5張牌中有4張一樣的牌(如33334),分數為40
五花牛——五張牌均是J,Q或K(如JQJQK),分數為50
五小牛——五張牌點數都小於5且點數和小於或等於10(如11223),分數為60
若有多種特殊牌型,得分取分數最大的特殊牌型(如11112視為五小牛)。
如果沒有特殊牌型,首先判斷牌型是否有“頭”,如果五張牌中任意三張的總和為10的倍數如(1K9)即為有“頭”,無“頭”的牌型得分為0。
對於有頭的牌型得分計算如下:
所有牌的和記為t,如果t%10=0則稱為“牛牛”,牛牛得分為30;t%10<7稱為“小牛”,得分為t%10,否則得分為(t%10)*2。
「輸入格式」
第一行一個整數T,表示T組資料
每組資料佔一行,為4個整數(11,12,13分別表示J,Q,K)
「輸出格式」
對於輸入的n行,輸出每4張牌的期望得分(四捨五入)
「樣例輸入」
2
2 2 2 2
10 4 5 12
「樣例輸出」
43
9
「樣例解釋」
對於2 2 2 2,最後一張為1或2時,構成五小牛,否則為炸彈,期望得分(2*60+11*40)/13=43。08
對於10 4 5 12,最後一張為1-13的得分分別是30+0+0+0+4+5+0+0+0+18+18+18+18=111/13=8。54
1為牛牛,5為4點,6為5點,10-13為9點,其餘無頭
「資料範圍」
30%的資料T<=5
70%的資料T<=100000
100%的資料T<=1000000