日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

拉马车 的游戏 c语言编程,蓝桥杯 拉马车(模拟)

發布時間:2024/10/8 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 拉马车 的游戏 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”,我們忽略了紙牌的花色。

從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

我們約定,輸入的串的長度不超過30

資源約定:

峰值內存消耗(含虛擬機) < 256M

CPU消耗 < 1000ms

請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多余內容。

所有代碼放在同一個源文件中,調試通過后,拷貝提交該源碼。

不要使用package語句。不要使用jdk1.7及以上版本的特性。

主類的名字必須是:Main,否則按無效代碼處理。

思路: 這題我也沒想出來分不出勝負的條件,所以猜測次數大于10000時,分不出勝負,結果還真ac了。

1 #include

2 #include

3 #include

4

5 using namespacestd;6

7 strings1;8 strings2;9

10 intmain()11 {12 cin >> s1 >>s2;13 queueQA;14 queueQB;15 for(int i = 0; i < s1.length(); ++i)16 QA.push(s1[i]);17

18 for(int i = 0; i < s2.length(); ++i)19 QB.push(s2[i]);20

21

22 string s; //s表示桌面的牌

23 int flag = 1; //flag等于1時A出牌,等于0時B出牌

24 int cnt = 0;25 while(!QA.empty() && !QB.empty())26 {27 ++cnt;28 if(cnt == 10000) //猜測游戲次數大于10000時,無法產生勝負

29 {30 cout << -1 <

34 {35 char pai_A = QA.front(); //pai_A表示此時A出的牌

36 QA.pop();37

38 int index =s.find(pai_A);39 s +=pai_A;40 if(index != string::npos)41 {42 string s3 = s.substr(index);  //s3表示要收回的那部分牌

43 for(int i = (int)s3.size() - 1; i >= 0; --i)44 QA.push(s3[i]); //收到的牌逆序放入B的隊尾

45 s.erase(index); //從桌面中刪除這部分牌

46 }47 else

48 flag = 0;49 }50 else //B出牌

51 {52 char pai_B =QB.front();53 QB.pop();54

55 int index =s.find(pai_B);56 s +=pai_B;57 if(index != string::npos)58 {59 string s3 =s.substr(index);60 for(int i = (int)s3.size() - 1; i >= 0; --i)61 QB.push(s3[i]);62 s.erase(index);63

64 }65 else

66 flag = 1;67 }68

69 }70

71 while(!QA.empty())72 {73 cout <

77 while(!QB.empty())78 {79 cout <

83

84 cout <

86 return 0;87 }

總結

以上是生活随笔為你收集整理的拉马车 的游戏 c语言编程,蓝桥杯 拉马车(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。