「小貓釣魚」遊戲規則: 將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手上的第一張撲克牌放在桌子上,然後小哈也拿出手上的第一張撲克牌,放在小哼剛打出的牌上面,就這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上的牌的牌面相同,即可將兩張相同的牌及其中間所加的牌全部取走,並依次放到自己手中牌的末尾,當任意一人手中的牌全部出完時,遊戲結束,對手獲勝。假如遊戲開始時,小哼手中有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;}
紙牌遊戲 小貓釣魚
星期天小哼和小哈約在一起玩桌遊,他們正在玩乙個非常古怪的撲克遊戲 小貓釣魚 遊戲的規則是這樣的 將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌...
紙牌遊戲 小貓釣魚
將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及其中間所夾的牌全部取走,並依次放到自己手中牌的末尾。當任意一人手中的...
紙牌遊戲 小貓釣魚
將一副撲克牌平均分成兩份,每人拿乙份。小哼先拿出手中的第一張撲克牌放在桌上,然後小哈也拿出手中的第一張撲克牌,並放在小哼剛打出的撲克牌的上面,就像這樣兩人交替出牌。出牌時,如果某人打出的牌與桌上某張牌的牌面相同,即可將兩張相同的牌及其中間所夾的牌全部取走,並依次放到自己手中牌的末尾。當任意一人手中的...