1
rock_cloud 2015-10-12 13:53:41 +08:00
每抽到一张就放到最后,然后在前边 n-1 张里随机选,再抽一张再放到倒数第二个,然后从前面 n-2 个里选。
|
2
BROWNURSIDAE OP @rock_cloud 比如我 dim arr ( 0 to 51 )
然后我怎么把 p1 弄到这个 arr 里??不理解 |
3
rock_cloud 2015-10-12 14:33:40 +08:00 1
这个是 VB 的语法么?是这样:
弄一个数组,赋值为 1 到 n ,然后随机的在前 n 个里选一个,之后交换选出的值和第 n 个值,然后 n = n - 1 ,一共重复这个操作 n-1 次。最后得到的数组就是一个包含随机值的数组。 VB 语法不懂,你看看我这个描述能实现吗? |
4
BROWNURSIDAE OP @rock_cloud 我看看我第一次接触编程没啥基础
|
5
RitianZhao1988 2015-10-12 15:40:31 +08:00
@BROWNURSIDAE 不用弄,把选出的牌的值设置为-1 ,下次碰到-1 直接跳过重循环就好
也可以在生成的时候先随机排序,下次按序号抽就可以了 XD |
6
maomaomao001 2015-10-12 15:51:28 +08:00 via Android
这样很麻烦吧,万一随机出来连续几个一样的,所以还是用表的结构吧,用完一个删一个
|
7
bingwenshi 2015-10-12 15:54:16 +08:00
直接把所有的牌做下随机序,然后从头取就行了
|
8
BROWNURSIDAE OP @maomaomao001 用表是不是要数据库的意思?
|
9
BROWNURSIDAE OP @bingwenshi 怎么把所有牌做随机序然后从头取?能贴个小代码块吗??
|
10
maomaomao001 2015-10-12 16:04:28 +08:00 via Android
@BROWNURSIDAE 不是那个表,是链表的表,数据结构
|
11
play78 2015-10-12 20:01:19 +08:00
其实这个不用那么复杂的,最简单的办法是 先按顺序写入,然后随机交换位置就可以了,这样就可以保证不重复了,对于几十个数来说,效率也不是很低,随机性也还可以。
Private Sub Command1_Click() Randomize Dim pk(55) As Integer Dim ss As String '52 张按顺序摆放 For i = 1 To 52 pk(i) = i Next i '随机打乱 For i = 1 To 1000 t1 = Int(Rnd() * 52 + 1) t2 = Int(Rnd() * 52 + 1) a = pk(t1) pk(t1) = pk(t2) pk(t2) = a Next i '输出 For i = 1 To 52 ss = ss + Str(pk(i)) + " " Next i Print ss End Sub 这样是不是好理解多了。 |
12
firemiles 2015-10-12 20:38:28 +08:00
l = [i for i in range(1,53)]
for i in range(52): card = random.choice(l) l.remove(card) print card 用 python 的 random.choice 就是随机抽取 自己实现也就是产生个剩下牌数的随机数,然后把牌取走 |
13
bsx1990 2015-10-13 07:27:05 +08:00 via iPhone
将楼上的两种方式还原成生活中的场景吧:
一种是拿一副扑克牌在手上,随机抽一张放在桌子上, 52 张都抽完了,也就结束了。 另一种是将这副扑克牌摊开在桌子上,然后像搓麻将一样的洗牌,洗完了也就结束了。 是不是好理解了呢? |