紙牌遊戲 小貓釣魚

2021-08-01 17:36:00 字數 2164 閱讀 8177

「小貓釣魚」遊戲規則: 將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手上的第一張撲克牌放在桌子上,然後小哈也拿出手上的第一張撲克牌,放在小哼剛打出的牌上面,就這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上的牌的牌面相同,即可將兩張相同的牌及其中間所加的牌全部取走,並依次放到自己手中牌的末尾,當任意一人手中的牌全部出完時,遊戲結束,對手獲勝。
假如遊戲開始時,小哼手中有6張牌,順序為2 4 1 2 5 6,小哈手中也有6張牌,順序為3 1 3 5 6 4,最終誰會獲勝呢?先賣個關子,先拿出紙牌來試一試。

在寫**之前,約定小哼和小哈手中的牌面只有1~9,先分析遊戲的幾種操作。

小哼有兩種操作,分別是出牌和贏牌,對應於佇列的兩個操作,出牌就是出佇列,贏牌就是佇列,小哈的操作和小哼是一樣的。桌子相當於乙個棧,每打出乙個牌就相當於入棧,當有人贏牌時,依次將牌從桌子上拿走,相當於出棧。

贏牌的規則是:如果某人打出的牌與桌子上的某張牌相同,即可將兩張牌及中間的牌全部取走。
struct

queue

;

struct

stack

;

struct

queue q1, q2;

struct

stack s;

//初始化佇列q1和q2為空,此時兩人手中都沒有牌

q1.head = 1

;q1.tail = 1

;q2.head = 1

;q2.tail = 1

;//初始化棧s為空,最開始桌上沒有牌

s.top = 0

;

//先讀入六張牌,放到小哼手上

for(int i=1; i<=6; ++i)

//再讀入六張牌,放到小哈手上

for(int i=1; i<=6; ++i)

t = q1.data[q1.head];//小哼先出牌

flag = 1;

for(int i=1; i

<=top; ++i)

}

if(flag == 0)  //表明桌子上沒有牌面為t的牌

//小哼此輪可以贏牌

if(flag == 1)

}

if(q2.head == q2.tail)

else

printf("桌上沒有牌了\n");

}

源**實現:

#include 

#include

typedef

struct

queue

queue;

typedef

struct

stack

stack;

int main()

//再讀入六張牌,放到小哈手上

for(int i=1; i<=6; ++i)

while(q1.head < q2.tail && q2.head < q2.tail) //當佇列不為空的時候執行迴圈

else

}t = q2.data[q2.head]; //小哈出牌

//判斷小哈當前打出的牌是否能贏牌

if(book[t] == 0) //表明桌子上沒有牌面為t的牌

else}}

if(q2.head == q2.tail)

else

printf("桌上沒有牌了\n");

}else

else

printf("桌上沒有牌了\n");

}system("pause");

return

0;}

紙牌遊戲 小貓釣魚

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

紙牌遊戲 小貓釣魚

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

紙牌遊戲 小貓釣魚

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