藍橋杯 歷屆試題 拉馬車(C )

2021-10-07 16:46:50 字數 1894 閱讀 9302

問題描述:

小的時候,你玩過紙牌遊戲嗎?

有一種叫做「拉馬車」的遊戲,規則很簡單,卻很吸引小朋友。

其規則簡述如下:

假設參加遊戲的小朋友是a和b,遊戲開始的時候,他們得到的隨機的紙牌序列如下:

a方:[k, 8, x, k, a, 2, a, 9, 5, a]

b方:[2, 7, k, 5, j, 5, q, 6, k, 4]

其中的x表示「10」,我們忽略了紙牌的花色。

從a方開始,a、b雙方輪流出牌。

當輪到某一方出牌時,他從自己的紙牌佇列的頭部拿走一張,放到桌上,並且壓在最上面一張紙牌上(如果有的話)。

此例中,遊戲過程:

a出k,b出2,a出8,b出7,a出x,此時桌上的序列為:

k,2,8,7,x

當輪到b出牌時,他的牌k與桌上的紙牌序列中的k相同,則把包括k在內的以及兩個k之間的紙牌都贏回來,放入自己牌的隊尾。注意:為了操作方便,放入牌的順序是與桌上的順序相反的。

此時,a、b雙方的手裡牌為:

a方:[k, a, 2, a, 9, 5, a]

b方:[5, j, 5, q, 6, k, 4, k, x, 7, 8, 2, k]

贏牌的一方繼續出牌。也就是b接著出5,a出k,b出j,a出a,b出5,又贏牌了。

5,k,j,a,5

此時雙方手裡牌:

a方:[2, a, 9, 5, a]

b方:[q, 6, k, 4, k, x, 7, 8, 2, k, 5, a, j, k, 5]

注意:更多的時候贏牌的一方並不能把桌上的牌都贏走,而是拿走相同牌點及其中間的部分。但無論如何,都是贏牌的一方繼續出牌,有的時候剛一出牌又贏了,也是允許的。

當某一方出掉手裡最後一張牌,但無法從桌面上贏取牌時,遊戲立即結束。

對於本例的初始手牌情況下,最後a會輸掉,而b最後的手裡牌為:

9k2a62kax58k57kj5

本題的任務就是已知雙方初始牌序,計算遊戲結束時,贏的一方手裡的牌序。當遊戲無法結束時,輸出-1。

輸入為2行,2個串,分別表示a、b雙方初始手裡的牌序列。

輸出為1行,1個串,表示a先出牌,最後贏的一方手裡的牌序

樣例輸入:

96j5a898qa

6278a7q973

樣例輸出:

2j9a7qa6q6889977

樣例輸入:

25663k6x7448

j88a5kjxx45a

樣例輸出:

6kaj458kxax885xj645

用**來模擬整個遊戲過程,a,b方的牌用佇列,桌子上的牌用vector儲存。

#include.h>

#include

#include

#include

using namespace std;

queue a,b;

//a、b方的牌

vector t;

//桌子上的牌

int main()

for(int i=

0;isize()

;i++

)while(1

)else

else}}

}else

if(flag==

false&&(

!b.empty()

))else

else}}

}else}if

(a.empty()

)}if(b.

empty()

)}return0;

}

藍橋杯 歷屆試題 拉馬車 棧與佇列

問題描述 小的時候,你玩過紙牌遊戲嗎?有一種叫做 拉馬車 的遊戲,規則很簡單,卻很吸引小朋友。其規則簡述如下 假設參加遊戲的小朋友是a和b,遊戲開始的時候,他們得到的隨機的紙牌序列如下 a方 k,8,x,k,a,2,a,9,5,a b方 2,7,k,5,j,5,q,6,k,4 其中的x表示 10 我...

藍橋杯 拉馬車 C語言,可除錯

小的時候,你玩過紙牌遊戲嗎?有一種叫做 拉馬車 的遊戲,規則很簡單,卻很吸引小朋友。其規則簡述如下 假設參加遊戲的小朋友是a和b,遊戲開始的時候,他們得到的隨機的紙牌序列如下 a方 k,8,x,k,a,2,a,9,5,a b方 2,7,k,5,j,5,q,6,k,4 其中的x表示 10 我們忽略了紙...

藍橋杯歷屆試題 尤拉與雞蛋

大數學家尤拉在集市上遇到了本村的兩個農婦,每人跨著個空籃子。她們和尤拉打招呼說兩人剛剛賣完了所有的雞蛋。尤拉隨便問 賣了多少雞蛋呢?不料乙個說 我們兩人自己賣自己的,一共賣了150個雞蛋,雖然我們賣的雞蛋有多有少,但剛好得了同樣的錢數。你猜猜看!尤拉猜不出。另乙個補充道 如果我按她那樣的 賣,可以得...