随机算法:从54张牌中随机抽取4张(不是问题,是测验一下你考虑问题的能力)(50分)

K

Kingron

Unregistered / Unconfirmed
GUEST, unregistred user!
赫赫,不要用4次Random()就聊事儿啊,仔细想想看看?然后写出你的算法!
不要小看他啊~~~~~~~~~:),不知道有多少任何以前的想法一样?我以前也没有注意到过~
后来才发现自己~~~~~~~~~弱~~~~~~~
 
zhihuali:
你已经考虑到了一些方面,当时还是不够全面!希望大家给出算法的时候,顺便给大家讲解一些
为什么要这么做吧。:)
 
var
Card:array[1..54] of Byte
//54张牌的代码
1.Form.OnCreate: // 对牌进行初始化
var
I:Integer;
J:Byte;
begin
Randomize;
For I:=1 to 54 do // 对牌的代码进行付值
begin
Card:=I;
end;

For I:=1 to 54 do // 将牌打乱
begin
J:=Random(54)+1;
Card:=J;
Card[J]:=I;
end;
end;

2.你要取牌,就顺着取就行了。
Card // 按顺序取出来的牌就是随机的.


to:Kingron
有什么不正确请说出来,不要....
 
var
Card:array[1..54] of Byte
//54张牌的代码
Out: array[1..4] of Byte
//抽出的牌

For I:=1 to 54 do // 对牌的代码进行付值
begin
Card:=I;
end;

{
抽出4张牌
}
var
I:Integer;
J:Byte;
begin
Randomize;

For I:=1 to 4 do //抽出4张牌
begin
J:=Random(54 - I + 1);
Out := Card[J]

Card[J] := Card[54 - I];
Card[54 - I] := Out;
end;
end;
 
to: yxyyyy
For I:=1 to 4 do // 将牌打乱
begin
J:=Random(54 - I + 1)
// J:=0时
Out := Card[J]
//error
 
To yxyyyy:
算法思路正确!给大家讲解一下,为什么不能自己用Random()了事儿?我表述不太清楚~~~:(
我不是要给程序加注释,而是要说明他的思路~~~~~:)
分数全部给你!
 
能不能把思路说清楚些
 
zhihuali的方法是正确的

从54张牌中随机抽取4张,其中第一张是完全随机的,第二张就不是完全随机了(它不可能
与第一张同),第三、第四也是一样。这也就是为什么不能自己用Random()了事儿的原因。
 
需要一个种子数,用时间作为种子数吧.
 
还是不知道你要说什么,随机数的产生用Random本来就是伪随机数,不过平时用用足够了。
如果想要真真的随机数没有这么简单。
 
应该是随机取出一张扑克,然后在剩下的扑克中再随机抽取一张,如此循环下去。
 
接受答案了.
 
简单的问题!!!
我来迟了。。。。
关键的将牌的顺序打乱,然后顺序抽就可以。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
545
import
I
I
回复
0
查看
621
import
I
顶部