切換
舊版
前往
大廳
主題

ZeroJudge - e263: 九九 解題心得

Not In My Back Yard | 2020-07-09 00:41:25 | 巴幣 2 | 人氣 139

題目連結:


題目大意:
輸入有多筆測試資料,每筆佔兩列。第一列給定兩正整數 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 ,就輸出目前出牌的玩家之編號。如果中途都沒事,就輸出目前的點數。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作