千
千中元
Unregistered / Unconfirmed
GUEST, unregistred user!
求在85到165之间的4个随机数,
这四个随机数中,任意两个地差值不大于5。
先把我写的(应该是本次比赛最后一名。。555)贴出来:
var
a: integer;
Temp:integer;
i,j:integer;
exist:boolean;
N:array [0..3] of integer;
begin
randomize;
a:=random(81)+85
//165-85=80;现在先在85---160之间得到一个随机数字
for i:=1 to 4 do //当i=2时候
begin
Exist:=false;
repeat
Temp:=random(5)+a;//范围为5
特别耗费时间。如果范围扩大,则不会出现这样的情况。如random(500);
for j:=0 to i-1 do
begin
if Temp=N[j] then
begin
Exist:=true;
break;
end
end;
if (not exist) then
N[i-1]:=Temp;
until not Exist
end;
end;
上面程序存在地问题就是,
random(5)以后就差不多陷入死循环了---虽然逻辑上是可以不死循环的,
但是运行起来确实是n 分钟不动。。
谁能写出来更好的..来练练手吧。
(洗牌算法。。等)
这四个随机数中,任意两个地差值不大于5。
先把我写的(应该是本次比赛最后一名。。555)贴出来:
var
a: integer;
Temp:integer;
i,j:integer;
exist:boolean;
N:array [0..3] of integer;
begin
randomize;
a:=random(81)+85
//165-85=80;现在先在85---160之间得到一个随机数字
for i:=1 to 4 do //当i=2时候
begin
Exist:=false;
repeat
Temp:=random(5)+a;//范围为5
特别耗费时间。如果范围扩大,则不会出现这样的情况。如random(500);
for j:=0 to i-1 do
begin
if Temp=N[j] then
begin
Exist:=true;
break;
end
end;
if (not exist) then
N[i-1]:=Temp;
until not Exist
end;
end;
上面程序存在地问题就是,
random(5)以后就差不多陷入死循环了---虽然逻辑上是可以不死循环的,
但是运行起来确实是n 分钟不动。。
谁能写出来更好的..来练练手吧。
(洗牌算法。。等)