面試題目記錄(1)

2020/07/01閱讀時間約 2 分鐘
題目要求

題目敘述

撲克牌有4種花色,分別是黑桃、紅心、方塊跟梅花
其中每一中花色都有一個數字,範圍從1~13,總共13*4 = 52張牌
1) 請從52張牌中挑選13張牌,輸出第一列所示,牌跟牌之間用tab隔開。
2) 請將抽出的13張牌依數字由大至小排序,同樣數字下比花色,花色大小為
黑桃>紅心>方塊>梅花。
注意! 排序時不能使用內建的sort()

當下想到的解法

解題思路: 以python撰寫為例

  • 將花色以list存放,黑桃(0)、紅心(1)、方塊(2)、梅花(3)各自有對應的index。
  • 抽出來的牌以tuple表示,用dictionary存放這13張牌,想法上以hash map 為出發點。
例如抽出來的第2張牌是紅心8 -> { 2 : (1, 8) }

實作

隨機從數字0~3挑選花色,從1~13挑選數字,將數對存到tuple中作為value,第幾次選取作為key。因此在迴圈執行後,pickedCard裡面存放著這13次抽出來的牌,用迴圈依次輸出。
其中pickedCard取出的花色是以數字呈現,作為color的index得到實際的花色字串,在輸出時與轉換過的數字字串做串接,印出結果。
第2個部分要的是排序結果,但我並沒有使用排序,而是讓迴圈從數字13~1、花色從0~3依序檢查是否為被挑出來的牌,如果是就輸出。
簡單來說我使用的是檢查所有請況,從最大到最小,有符合要件就輸出。

感想

先前其實沒對撲克牌的題目做過練習,不過曾經在網路上看過JAVA寫的一些撲克牌程式的處理,因此至少會考慮把花色跟數字分開做處理。看到題目說明不能使用內建排序方法,原本想說自己寫一個function來用就好,不過頂多也就52張牌,於是就採取比較tricky的方式達到題目的要求。
考試當下是筆試不是上機,語法上也沒有那麼確定,不過事後寫出來還是有寫對9成的語法,也同時發現了沒注意到的bug,就是當我挑選的那13張牌有重複時,依序輸出就不會是13張牌,而是少於13張牌,然而實際上也不應該有重複的牌出現,算是沒注意到的大問題。

10會員
54內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
留言0
查看全部
發表第一個留言支持創作者!