題目連結:
題目大意:
輸入有多筆測試資料,每筆佔兩列。第一列給定兩正整數 n 、 m (2 ≦ n ≦ 100 , 1 ≦ m ≦ 1000),代表有 n 個人、總共出了 m 張牌。接著的一列給定 m 張牌的資訊。
牌可能是 A 、 2 、 3 、 4 、 5(x) 、 6 、 7 、 8 、 9 、 10+ 、 10- 、 J 、 Q+ 、 Q- 或是 K。每張牌各自有各自的效果。
A 會將目前點數歸零、
4 會反轉出牌的方向、
5 會指定一名玩家,而 (x) 即是玩家編號 x ,代表從該玩家開始出牌、
10 跟 Q 後面接著 + 或 - 代表是要 +10 (Q 是 +20) 還是 -10 (此時 Q 是 -20) 、
J 代表略過、
K 代表將目前點數變為 99 。
其餘的牌單純是將目前點數加上牌上面的點數值。
如果點數因為 10 或 Q 的牌而減到小於 0 ,則將點數設回 0 。
現在從玩家 1 (玩家編號 1 ~ n)開始出牌,一開始是順時針輪替(如果有 4 則會改變方向,順時針變逆時針,或是逆時針變回順時針)。而這 n 個人按照編號小到大順時針坐。點數初始為 0。
當有玩家使目前點數超過 99 時,請輸出該玩家的編號並接著輸出「 cheated!」;如果點數從頭到尾都沒有爆掉,從輸出「The sum is 」,並接著目前點數之值。詳見範例輸出。
5 5
K Q- Q+ J 4
3 5
A A A A A
4 7
K K J 5(1) Q+ Q- A
The sum is 99
The sum is 0
1 cheated!
單純的模擬題。把每張牌當作一個字串讀進來,然後看第一個字元是什麼去判斷該執行什麼動作。開頭是 A 就將點數歸零 、開頭 J 就換下一個玩家、……,其中 1 開頭代表牌為 10,後面可能接著 + 或是 - ,依序代表 +10 或 -10 。
比較麻煩一點的是 5 這張牌,後面會跟著一個 (x) ,而 x 是一個介於 1 ~ n 數字。需要將其提取出來。
如果過程中,點數有超過 99 ,就輸出目前出牌的玩家之編號。如果中途都沒事,就輸出目前的點數。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。