所以我有一個鏈表,用來代表一手五張撲克牌。我正在嘗試撰寫一個函式來檢查卡片是否為同花順。我做的第一件事是檢查所有卡片的花色是否相同。接下來是我遇到麻煩的地方。我的想法是我會檢查是否有任何一張牌是國王 (13)。如果有,那么它會再次通過串列檢查 Q、J、A 和 10,如果在任何時候都沒有找到一張牌,它回傳 0。如果所有的牌都在那里并且他們有同樣的衣服,該函式回傳 1。這是我到目前為止所得到的:
int royalFlush(card* pHand) {
card* temp = pHand;
if (!suitCheck(temp)) {
return 0;
}
else {
while (temp != NULL) {
//check if the card has the right face here
temp = temp->next;
}
}
}
int suitCheck(card* pHand) {
card* tmp;
tmp = pHand;
while (tmp != NULL) {
if (tmp->suit != tmp->next->suit) {
return(0);
}
tmp = tmp->next;
}
return(1);
}
我在弄清楚如何從一張卡片移動到下一張卡片并檢查每張卡片的正面是否具有正確的值時遇到了麻煩。我也不確定: tmp->next->suit 是否是編譯器可以正確讀取的內容。
uj5u.com熱心網友回復:
假設卡片按花色和降序排列,
- 如果手是空的,
- 回傳假。
- 得到第一張牌的花色。
- 創建陣列 [ Ace, King, Queen, Jack, 10 ]。
- 設定
i為陣列第一個元素的索引。 - 將當前卡設定為第一張卡。
- 雖然當前卡片不為空并且
i在陣列的范圍內,- 如果當前卡的花色與第一張卡的花色不匹配,
- 回傳假。
- 如果當前卡片的排名與 index 對應的排名不匹配
i,- 回傳假。
- 增量
i。 - 使當前卡成為以下卡。
- 如果當前卡的花色與第一張卡的花色不匹配,
- 回傳真。
請注意,如果用于紙牌游戲手的非常奇怪的結構,則為鏈表。
uj5u.com熱心網友回復:
歡迎來到 SO!希望您在這里度過愉快的時光。
如果您能夠稍微修改函式簽名,則可以執行以下操作:
int suitCheck(card *pHand, suit expected_suite)
{
if(pHand == NULL) {
return 0; /* You can remove this if you're absolutely sure the initial next of the original pHand is not NULL */
}
while(pHand) {
if(pHand->suite != expected_suite) {
return 0;
}
}
return 1;
}
然后你可以像這樣從主代碼中呼叫它:
if(suitCheck(temp->next, temp->suite)) {
我會讓你想象如何在不修改函式簽名的情況下完成同樣的壯舉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/370224.html
下一篇:函式內的函式次數未知
