Re: [問題] 請問大家對這個問題有何看法
※ 引述《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
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章