var a,b,c: Integer; Randomize; //初始化随机数 a:=Random(n-1)+1; //如果n=50,0<=Random(50-1)<=49 b:=Random(n-1)+1; c:=Random(n-1)+1;
s[3]: int; s[1]=s[2]=s[0]=-1; Randomize;// for i:= 0 to 2 do begin s[i]:= rand()*n; for j := 0 to i -1 do if (s[i] = s[j]) and (i <> 0) then begin i:= i-1; break; end; end; 输出s
to myling(阿德) : 谢谢提醒,刚才考虑不周。 以下程序只提供思路,没有测试过。 repeat Randomize; //初始化随机数 a:=Random(n-1)+1; //如果n=50,0<=Random(50-1)<=49 b:=Random(n-1)+1; c:=Random(n-1)+1; until (a<>b) and (b<>c) and (a<>C)
对了楼主这类的问题,可以认为是 从 1~m个连续数字中,取n个不重复的。这个按照效率可分为2个办法,1.当 m 和 n 比较接近,类似楼上说的例子 14取10,如果每次都是从14中取一个,这时候取重复数概率比较高,大约每次的重复的概率是 1/14,可以采用阿德帖子里面的算法,因为用一个数组存储m的开销不大。2.当 m >> n, 我们认为每次取数的概率非常低了,存储m的开销变大了(比如m=1000,我们需要一个1000个元素的数组),我们就只把每次去出来的数纪录就行了,如果重复了,重新抽取一次,这样的开销是最小的。 当然了,这个m和n的界定是一个模糊的概念,看你自己了。
厉害!真是个好方法
a,b,c: Integer; Randomize; //初始化随机数
a:=Random(n-1)+1; //如果n=50,0<=Random(50-1)<=49
b:=Random(n-1)+1;
c:=Random(n-1)+1;
s[1]=s[2]=s[0]=-1;
Randomize;//
for i:= 0 to 2 do
begin
s[i]:= rand()*n;
for j := 0 to i -1 do
if (s[i] = s[j]) and (i <> 0) then
begin
i:= i-1;
break;
end;
end;
输出s
http://expert.csdn.net/Expert/topic/1767/1767707.xml?temp=.6174433
谢谢提醒,刚才考虑不周。 以下程序只提供思路,没有测试过。 repeat
Randomize; //初始化随机数
a:=Random(n-1)+1; //如果n=50,0<=Random(50-1)<=49
b:=Random(n-1)+1;
c:=Random(n-1)+1;
until (a<>b) and (b<>c) and (a<>C)
当然了,这个m和n的界定是一个模糊的概念,看你自己了。
俺出了delphi区全是一个小三角,哈哈,除了水源