for i:=1 to numitems do //这里的numitems为一个整数. begin with Itembank[i] do //itembank为一个记录数组 begin Ltype:='MC'; ILabel:='MC'+inttostr(i); Repeat randomize; weight:=Random(3) Until weight<>0; Repeat randomize; Score:=Random(10) Until Score<>0; randomize; Difficulty:=random; randomize; Distinguish:=random; end; end; 还是不行,我每次在取之前都进行random了,可是显示出结果还是相同.
Randomize; for i:=1 to numitems do //这里的numitems为一个整数. begin with Itembank[i] do //itembank为一个记录数组 begin Ltype:='MC'; ILabel:='MC'+inttostr(i); Repeat // randomize; weight:=Random(3) Until weight<>0; Repeat // randomize; Score:=Random(10) Until Score<>0; randomize; Difficulty:=random; // randomize; Distinguish:=random; end; end;
----〉random(100)取循环取值每次的值的相同?把你的源代码贴出来,瞅瞅
Randomize;
当然了也有同一的方法就是查表,作一个索引表就可以实现由一个均匀分布生成任何分布的随机函数。
皮尔逊-III 型曲线分布的一系列值,要的花可以发给你,因为如果符合某种
分布的话就不再时随机过程了。现在的random构造的是均匀分布的值,如果是正态分布加控制条件就可以了
begin
with Itembank[i] do //itembank为一个记录数组
begin
Ltype:='MC';
ILabel:='MC'+inttostr(i);
Repeat
randomize;
weight:=Random(3)
Until weight<>0;
Repeat
randomize;
Score:=Random(10)
Until Score<>0;
randomize;
Difficulty:=random;
randomize;
Distinguish:=random;
end;
end;
还是不行,我每次在取之前都进行random了,可是显示出结果还是相同.
在每个用到随机数的线程(包括主线程)开始加上
srand(GetCurrentThreadId());
~~~~~~
这是什么?
delphi不认.
for i:=1 to numitems do //这里的numitems为一个整数.
begin
with Itembank[i] do //itembank为一个记录数组
begin
Ltype:='MC';
ILabel:='MC'+inttostr(i);
Repeat
// randomize;
weight:=Random(3)
Until weight<>0;
Repeat
// randomize;
Score:=Random(10)
Until Score<>0;
randomize;
Difficulty:=random;
// randomize;
Distinguish:=random;
end;
end;
请问您说的查表方法,作一个索引表就可以实现由一个均匀分布生成任何分布的随机函数。是如何来做这个索引表呢?是自己写一个随机函数吗?
能不能再详细地解答一下?
BTW:难度random出来的值不是正态分布的吗?如何才能看出random是按照分布取值的?
确实这样可以,好奇怪!
那请问关于某种分布的取值该如何实现?
假设有一个函数S()可以得到1到100之间的均匀分布的数字
如果你要的到一个从1到10分布概率是1%,4%,10%,15%,20%,20%,15%,10%,4%,1%
那么构造一个从1到100的数组a
使得
a[1]=1;
a[2]=2;....a[5]=2;
a[6]=3............a[15]=3;
a[16]=4.....................a[30]=4;
.
.
.
.
a[100]=10;
然后函数F()=a[s()]可以得到这种分布
不知道说明白了吗?
请参考:
http://www.csdn.net/expert/topic/656/656880.xml?temp=.485882