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

2021-10-02 17:55:36 字數 2053 閱讀 3319

某一天張兵和小明在一起玩撲克牌,每個人各自拿取乙份撲克牌,張兵先把一張撲克牌放在桌子上,小明再放一張,出牌時

,如果某人打出的牌與桌上的某張牌的牌面相同,即可將兩張相同的牌及其之間所夾的牌全部取走,並依次放到自己手牌的

末尾,當任意一人的手牌全部出完後,遊戲結束,對手獲得勝利。

我們先來分析遊戲中的幾種操作,分別是出牌和贏牌,每個人的手牌可以設定成佇列結構,出牌時從佇列首彈出乙個元素,

贏牌時就將贏的牌插入佇列尾部。 桌子可設定成乙個棧的結構,兩人出的牌都進入棧中,當某個輸入的元素與棧中的

某乙個元素相同時,將這兩個元素及其之間的元素全部出棧,並且入勝利者的對列。

一 .首先設定資料結構,即兩個佇列乙個棧

struct queue

;struct stack

;struct queue q1,q2;

struct stack s;

二.初始化佇列和棧

q1.head=

1; q1.tail=1;

q2.head=

1; q2.tail=1;

s.top=0;

//初始階段兩人手中都沒有牌,並且桌上也沒有牌。

三.給兩人新增手牌

for

(i=1

;i<=

10;i++

)for

(i=1

;i<=

10;i++

)

四.判斷過程

t=q1.data[q1.head]

;//打出一張牌

flag=0;

for(i=

1;i<=s.top;i++

)//列舉桌子上的牌逐一對比}if

(flag==0)

if(flag==1)

}

五.勝利條件判斷

while

(q1.head//兩人手牌都不為空則進行遊戲

六.演算法優化

判斷能否贏牌這個演算法要依次進行對比,複雜度高,我們可以開乙個陣列記錄桌子上已經有那些牌了,類似於桶排序的用法。

那麼**可以優化為:

int book[10]

;for

(i=1

;i<=

0;i++

)book[i]=0

;t=q1.data[q1.head];if

(book[t]==0

)

七.完整**

#include

struct queue

;struct stack

;int

main()

for(i=

1;i<=

10;i++

)while

(q1.headelse

book[s.data[s.top]

=s.data[s.top]

;//在收回另一張t牌

q1.tail++

; s.top--;}

if(q1.head==q1.tail)

break

;//張兵沒牌了,結束遊戲,後面是一樣的**,只是第二個人的過程

t=q2.data[q2.head]

;//小明出一張牌

if(book[t]==0

)else

book[s.data[s.top]

=s.data[s.top]

; q2.tail++

; s.top--;}

}if(q2.head==q2.tail)

printf

("張兵贏了"

); else

}

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

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

紙牌遊戲 小貓釣魚

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

紙牌遊戲 小貓釣魚

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