作者seagal (待救的小米)
看板C_Sharp
标题Re: [问题] 请问大家对这个问题有何看法
时间Tue Dec 7 23:15:04 2004
※ 引述《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