拉马车 的游戏 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语言编程,蓝桥杯 拉马车(模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言口令验证模块加强版,[C语言学习第
- 下一篇: 如何对android菜单,Android