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

看板C_Sharp (C#)作者時間20年前 (2004/12/08 01:34), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串6/7 (看更多)
※ 引述《seagal (待救的小米)》之銘言: : ※ 引述《erichugh (轉阿轉~~)》之銘言: : : 這是大一計概的東西 沒有那麼複雜 : : 不能使用陣列 是教授規定的 : : 我所想到的是 使用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的原因 : 重點在虛擬碼第二行 透過改變選擇亂數範圍 避免有問題 : 這邊我就不多作解釋了 : 所以你不想用陣列存也可以 : 只要弄個像陣列的東西出來 : 可以實作洗牌演算法就好 : 例如你說的那個方法 P(1) P(2) P(3) P(4)代表四組人 ()內的值只是為了好表達可以用非陣列方式作 I(1) I(2) I(3) I(4)代表四組人index count C(1) C(2) C(3) C(4)代表四組花色 I1=I2=I3=I4=13 for(int i = 1 ; i <= 4 ; i++) for(int j = 1 ; j <= 13 ; j++) { int r = Random(4); while(I(r)==0) r = Random(4); P(r)+=C(i)+j; I(r)--; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.104.240.176

140.109.73.177 12/08, , 1F
看無 可不可以解釋一下啊
140.109.73.177 12/08, 1F
文章代碼(AID): #11jUcdkv (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #11jUcdkv (C_Sharp)