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