Re: [問題] 請問大家對這個問題有何看法

看板C_Sharp (C#)作者 (待救的小米)時間20年前 (2004/12/07 23:02), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/7 (看更多)
※ 引述《erichugh (轉阿轉~~)》之銘言: : ※ 引述《seagal (待救的小米)》之銘言: : : 蠻奇怪的 : : 還有作業規定資料結構長什麼樣子 : : 撲克牌明明就是適合利用array來儲存的 : : 難不成還要利用graph, tree? : 這是大一計概的東西 沒有那麼複雜 : : 原波你給的資訊也太少了 : : 至少先說明一下 : : 為什麼不要用array的理由 : 不能使用陣列 是教授規定的 : : 是否有其他data structure適合 : : 以及你想到的data structure, algorithm : 我所想到的是 使用binary bits紀錄牌是否已經發過 : 使用long 52張牌都能紀錄到 : 發過是1未發是0 : 使用 && 或是 / 檢查是否有發過 : 大致上是這樣子的概念 你這樣做也可以 骨子裡其實跟array是一樣的 既然你教授這樣要求 那就來想一個適合他的版本吧 要完成撲克牌洗牌問題 我們需要兩樣東西 1. data structure: 儲存52張撲克牌 2. algorithm: 實作洗牌演算法 最適合儲存撲克牌 當然就是array啦 稍後再來研究這邊如何不要用array 第二步驟是洗牌演算法 這種演算法叫做shuffle 我們可以選用fisher_yates_shuffle 步驟很簡單 ------------------ for i = 0 to 51 j = int rand(i+1) change element at i, j ------------------ 洗牌完之後就很簡單了 前面十三張撲克牌發給第一人 之後十三張發給第二人... 要注意的是選用fisher_yates的原因 重點在虛擬碼第二行 透過改變選擇亂數範圍 避免有問題 這邊我就不多作解釋了 所以你不想用陣列存也可以 只要弄個像陣列的東西出來 可以實作洗牌演算法就好 例如你說的那個方法 -- 生物資訊研究室:每天都會更新文件,提供生物資訊教學,生物字典。 http://www.bioinformatic.idv.tw -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.73.177
文章代碼(AID): #11jSO6qM (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #11jSO6qM (C_Sharp)