鬥牛衆所周知的一款撲克牌遊戲,其核心規則是需要對牌面進行計算出牛幾或者牛牛的。我們看看程序上怎麼去實現算法
首先,鬥牛的規則是:
1.一副牌,去掉兩個王,總共52張牌,2-6個人玩,每人發5張牌。
2.5張牌中的任意3張加起來不能成爲10的倍數(如5,6,8,10,J)則是 無牛
3.張牌中的任意3張加起來爲10的倍數,但另外2張不爲10的倍數。至於到底是牛幾,就要看另外2張牌相加之後的個位數。(如5,6,7,9,J 爲牛7)
4.5張牌中的任意3張加起來爲10的倍數,且另外2張也爲10的倍數(如5,6,9,10,J)。
弄清除基本規則後,直接上代碼,代碼中有註釋。
public static String syncBull(Integer[] cards) {
// 計算總點數
int sums = 0;
for (int i = 0; i < cards.length; i++) {
if (cards[i] > 10) {
cards[i] = 10;
}
sums += cards[i];
}
//牛牛
if (sums % 10 == 0) {
return "牛牛🐮";
}
// 牛丁 ~ 牛九
int bull = 0;
for (int i = 0; i < cards.length - 2; i++) {
int cardI = cards[i];
for (int j = i + 1; j < cards.length; j++) {
int cardJ = cards[j];
for (int k = j + 1; k < cards.length; k++) {
int cardK = cards[k];
int total = cardI + cardJ + cardK;
if (total % 10 == 0) {
int n = (sums - total) % 10;
bull = bull < n ? n : bull;
}
}
}
}
if (bull == 0) {
return "無牛🐮";
} else {
return "牛" + bull + "🐮";
}
}
輸入爲一個數組,即是五張牌。 Integer[] cards = new Integer[]{5, 4, 11, 10, 12};
這樣就實現了一個基本的牛牛核心算法。可能有些還有同花牛,順子牛,五小牛之類的。下次再補充哈。