moea_joint_essay
104年
[統計資訊] 資料庫及資料探勘、程式設計
第 二 題
📖 題組:
如欲以結構化程式設計方式利用堆疊設計一簡易撲克牌遊戲發牌系統,包含洗牌、切牌及發牌,以數字 1~52 代表撲克牌 52 張牌,堆疊陣列 R[0..51]儲存代表 52 張撲克牌之數字,R[51]為底部第 52 張牌,R[0]為頂部第 1 張牌:
如欲以結構化程式設計方式利用堆疊設計一簡易撲克牌遊戲發牌系統,包含洗牌、切牌及發牌,以數字 1~52 代表撲克牌 52 張牌,堆疊陣列 R[0..51]儲存代表 52 張撲克牌之數字,R[51]為底部第 52 張牌,R[0]為頂部第 1 張牌:
📝 此題為申論題,共 4 小題
小題 (二)
已用隨機方式選擇從陣列 R 第 20 張牌(R[19] )切牌,並開始取出發牌,請問取出發牌的順序為何?請以 R 陣列內含引數 R[i]方式表示。(5 分)
思路引導 VIP
切牌在 R[19],代表把頂端的 20 張牌 (R[0]到R[19]) 移到原本整疊牌的最底部。因此新的牌頂會是 R[20]。發牌順序將從新的牌頂開始依序至底,再接回原本被移到底部的牌。
小題 (一)
洗牌部分,先用亂數方式隨機取出上述 52 個數字其中 1 個數字(代表隨機取一張牌)以堆疊方式填入陣列 R 之底部,再繼續取下 1 個數字(下一張牌,須判斷亂數取出之數是否已被取出過,若已取過須重取)以堆疊方式依序填入陣列 R,直至 52 個數字(52 張牌)皆被取出填入陣列 R 為止,試畫出其流程圖。(5 分)
思路引導 VIP
需描述流程圖:初始化變數,使用迴圈從堆疊底部 (index 51) 裝填到頂部 (index 0);每次生成 1-52 的亂數,檢查是否重複,不重複則存入 R 並遞減 index。
小題 (三)
開始發牌後,如何判斷已發牌至堆疊陣列 R 之底部,以及如何繼續取出下一張牌至整副牌發完?試以流程圖表示。(10 分)
思路引導 VIP
可以設定一變數為目前指向的陣列索引 (如 current_index = 20) 以及已發牌數 (count = 0)。發牌時判斷 current_index 是否大於 51 (底部),若超過則歸零 (繞回 R[0]),直到發牌數達到 52 為止。
小題 (四)
洗牌及切牌均須隨機從 1~52取出一數字,今有一無參數之亂數函數 rand( )可隨機傳回值K,其中 0≤ K<1,請問如何利用 rand( )隨機取出 1~52,試寫出其程式表示式。(5 分)
思路引導 VIP
rand() 產生 [0, 1) 的實數,乘以 52 將範圍展開為 [0, 52)。無條件捨去取整數後得到 0~51 的整數,再加 1 即可將範圍平移至 1~52。