先放个随机种子。
Randomizde;
for ii:=0 to 100 do
begin
  Random(100);
end;

解决方案 »

  1.   


    ----〉random(100)取循环取值每次的值的相同?把你的源代码贴出来,瞅瞅
      

  2.   

    使用Random之前,执行下句:
    Randomize;
      

  3.   

    没错相同的种子每次出来的随机数是相同的。必须用Randomizes进行初始化才可以不同,random出来的是均匀分布的,要想得到不同的分布是要分别处理的,比如高斯分布可以由10个以上的独立的均匀分布生成。
    当然了也有同一的方法就是查表,作一个索引表就可以实现由一个均匀分布生成任何分布的随机函数。
      

  4.   

    在每个用到随机数的线程(包括主线程)开始加上 srand(GetCurrentThreadId());
      

  5.   

    如果想构造符合某种分布的值很难,我在毕业设计时构造了符合
    皮尔逊-III 型曲线分布的一系列值,要的花可以发给你,因为如果符合某种
    分布的话就不再时随机过程了。现在的random构造的是均匀分布的值,如果是正态分布加控制条件就可以了
      

  6.   

    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了,可是显示出结果还是相同.
      

  7.   

    回复人: hhmmdd(懵懂) 
    在每个用到随机数的线程(包括主线程)开始加上 
    srand(GetCurrentThreadId());     
    ~~~~~~
    这是什么?
    delphi不认.                             
      

  8.   

    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;
      

  9.   

    回复人: larky(睡仙)
    请问您说的查表方法,作一个索引表就可以实现由一个均匀分布生成任何分布的随机函数。是如何来做这个索引表呢?是自己写一个随机函数吗?
    能不能再详细地解答一下?
    BTW:难度random出来的值不是正态分布的吗?如何才能看出random是按照分布取值的?
      

  10.   

    to回复人: genphone_ru(票票) 
    确实这样可以,好奇怪!
    那请问关于某种分布的取值该如何实现?
      

  11.   

    举个例子吧希望我说的明白
    假设有一个函数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()]可以得到这种分布
    不知道说明白了吗?
      

  12.   

    Randomize、Random只是个伪随机函数。
      

  13.   

    随机取一些值,使得他们每次取的都不同?
    请参考:
    http://www.csdn.net/expert/topic/656/656880.xml?temp=.485882