求算法公式:随机生成1-100,生成的数越大概率越小。 ( 积分: 50 )

  • 主题发起人 主题发起人 336764
  • 开始时间 开始时间
3

336764

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]

求算法公式:
要求以生成数越大概率越小的原则,随机生成1-100之间的数。

像使用random(100)能生成1-100之间的数,但是每个数的概率是相同的,用什么公式才能让生成出来的数概率不同,数值越大,概率越小。

非常感谢。
 
我认为要从样本空间入手
由于数字是0..100,我准备101个样本空间,合起来统称样本全集,空间样本数一次递减
从样本全集中随机抽取,如果抽中样本空间X,得到的随机数就是X

欢迎加入Delphi交流群:33783080(Delphi园艺)
 
Randomize;
Random(Random(100));
 
Random(Random(100));
-------高手
 
修正一下:
1-100应该为(含1和100):
Randomize;
1+Random(Random(101));
 
方法和我昨天晚上想到的一样。两次随机。
http://zhidao.baidu.com/question/38758235.html
 
但是我也有个问题,就是它的概率是怎么计算的?
因为我用程序列出来,从0-100的取得次数,
无论我取多少次,98-100都取不到值,永远是0次
 
Random(n)不是1~n
而是0~(n-1)
用修正的方法可取1~100
 
已经解决了。
概率大概为:
最小的10万分之7左右
最大的千分之60左右。。
ListV1[1]:=7
ListV1[2]:=22
ListV1[3]:=23
ListV1[4]:=37
ListV1[5]:=49
......
ListV1[97]:=3354
ListV1[98]:=3626
ListV1[99]:=4192
ListV1[100]:=6047
 
不同的随机范围,概率不同。这个问题基本已经解决。谢谢你,以后有算法方面的问题,我再问你。谢谢 。。
 
概率:
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure TForm1.btn1Click(Sender: TObject);
const
Times:Integer=100000;
N=100;
var
I:Integer;
MyAry:array[1..N] of Integer;
begin
mmo1.Clear;
FillChar(MyAry[1],N*SizeOf(Integer),0);
for I:=1 to Times do
Inc(MyAry[1+Random(Random(N+1))]);
for I:=1 to N do
mmo1.Lines.Add(Format('%.3d:%f%%',[I,MyAry*100/Times]));
end;
 
概率:
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
end;

procedure TForm1.btn1Click(Sender: TObject);
const
Times:Integer=100000;
N=100;
var
I:Integer;
MyAry:array[1..N] of Integer;
begin
mmo1.Clear;
FillChar(MyAry[1],N*SizeOf(Integer),0);
for I:=1 to Times do
Inc(MyAry[1+Random(Random(N+1))]);
for I:=1 to N do
mmo1.Lines.Add(Format('%.3d:%f%%',[I,MyAry*100/Times]));
end;
 
还有个问题,最小数如果是50-100
50+Random(101)的话,如果随机出来100,+50就变150了啊。
如果用if 判断大小的话,概率就变了,有什么办法? 谢谢。
 
50 + Random(101-50)
 
脑子有时会混沌。。。。
 
(101+50) - ((101+50) - Random(Random(101-50)))

咋这么乱呢。。。看着像没道理一样。。。
 
50+Random(Random(52))
 
50+Random(Random(52))
 
后退
顶部