紙牌遊戲 小貓釣魚 棧與佇列合用實現

2021-06-27 04:40:54 字數 1058 閱讀 9176

遊戲規則:將一副撲克牌平均分為兩份,每人拿乙份,a先拿出手中的第一張撲克牌放在桌上,然後b也拿出手中的第一張撲克牌,並放在a剛打出的撲克牌的上面,就像這樣兩人交替出牌. 出牌時如果某人打出的牌與桌上某張牌的牌面相同時,即可將兩張相同的牌及其中間所夾的牌全部取走,並依次放到自己手中牌的末尾,當其中一人手中的牌全部出完時,遊戲結束,對方獲勝.

假設遊戲開始,預設牌面只有1~9,a手中有6張牌,順序為:2 4 1 2 5 6,b手中也有6張牌,順序為:3 1 3 5 6 4. 最終誰會獲勝?

solution: a,b主要是有兩種操作,分別是出牌和贏牌. 這恰好是佇列的出隊和入隊兩個操作,而桌子就是乙個棧,每打出一張牌就等於入棧,當有人贏牌時就相當於出棧拿走牌. 取走牌的規則是某人打出的牌與桌上某張相同,這裡我們可以類似桶排序用乙個陣列記錄桌上有哪些牌,當然列舉用乙個for迴圈也是可以的.

code:

#include #include #include struct queue

;struct stack

;int main(int argc, char const *argv)

for (i = 0; i < 6; ++i)

for (i = 0; i < 6; ++i)

while(q1.head < q1.tail && q2.head < q2.tail)

else

}t = q2.data[q2.head];

if(0 == book[t])

else

}} if(q2.head == q2.tail) /// 對手手中沒有牌

if(s.top > -1) /// 輸出桌上的牌

question: 怎麼解決遊戲結束問題?

紙牌遊戲 小貓釣魚(佇列與棧綜合)

某一天張兵和小明在一起玩撲克牌,每個人各自拿取乙份撲克牌,張兵先把一張撲克牌放在桌子上,小明再放一張,出牌時 如果某人打出的牌與桌上的某張牌的牌面相同,即可將兩張相同的牌及其之間所夾的牌全部取走,並依次放到自己手牌的 末尾,當任意一人的手牌全部出完後,遊戲結束,對手獲得勝利。我們先來分析遊戲中的幾種...

紙牌遊戲 小貓釣魚

小貓釣魚 遊戲規則 將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手上的第一張撲克牌放在桌子上,然後小哈也拿出手上的第一張撲克牌,放在小哼剛打出的牌上面,就這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上的牌的牌面相同,即可將兩張相同的牌及其中間所加的牌全部取走,並依次放到自己手中牌的末尾,當任意...

紙牌遊戲 小貓釣魚

星期天小哼和小哈約在一起玩桌遊,他們正在玩乙個非常古怪的撲克遊戲 小貓釣魚 遊戲的規則是這樣的 將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌...