c*******r 发帖数: 309 | 1 How to randomly shuffle a deck of card? I saw this question several time,
but never know the answer |
B******5 发帖数: 4676 | |
e*********l 发帖数: 136 | |
d********t 发帖数: 9628 | 4
只有52张牌的话直接产生随机数不是更方便吗?
【在 B******5 的大作中提到】 : Knuth的方法
|
B******5 发帖数: 4676 | 5 how?你来说说看
【在 d********t 的大作中提到】 : : 只有52张牌的话直接产生随机数不是更方便吗?
|
d********t 发帖数: 9628 | 6
assign a random no. to each of the 52 cards,
sort them with respect to the random numbers
【在 B******5 的大作中提到】 : how?你来说说看
|
h**6 发帖数: 4160 | |
d********t 发帖数: 9628 | 8 我非CS野路子C++用户回答不了
【在 h**6 的大作中提到】 : 那么,第一步怎么给52张牌赋随机值呢?
|
h**6 发帖数: 4160 | 9 生成52个随机数很容易,难点在于生成范围为1-52且不重复的随机数。
前面有人贴的链接可以参考一下。 |
B******5 发帖数: 4676 | 10 that is my point, too
【在 h**6 的大作中提到】 : 生成52个随机数很容易,难点在于生成范围为1-52且不重复的随机数。 : 前面有人贴的链接可以参考一下。
|
s********y 发帖数: 161 | 11 本人第一轮电面就有这题,很常见的。先问你个扑克牌怎么design,再shuffle下。 |
S*******0 发帖数: 198 | 12 一开始产生 n1 = rand(0,52); //0-51
swap decks[0], decks[n1]
产生 n2 = rand(0,51); //0-50
swap deck[1], decks[n2 + 1]
n3 = rand(0,50); //0-49
swap deck[2], decks[n2 + 2]
and so on.
【在 B******5 的大作中提到】 : how?你来说说看
|
c*******r 发帖数: 309 | 13 To shuffle an array a of n elements (indices 0..n-1):
for i from n − 1 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i] |
B******5 发帖数: 4676 | 14 这难道不是Knuth shuffle?
【在 S*******0 的大作中提到】 : 一开始产生 n1 = rand(0,52); //0-51 : swap decks[0], decks[n1] : 产生 n2 = rand(0,51); //0-50 : swap deck[1], decks[n2 + 1] : n3 = rand(0,50); //0-49 : swap deck[2], decks[n2 + 2] : and so on.
|