Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

Выбрать из ста 20 случайных неповторяющихся чисел   Найти похожие ветки 

 
ss300 ©   (2003-06-29 17:02) [0]

Как выбрать из ста 20 случайных неповторяющихся чисел?


 
MBo ©   (2003-06-29 17:07) [1]

Уточни вопрос


 
ss300 ©   (2003-06-29 17:12) [2]

есть массив из 20 элементов, элементы которого должны быть непоторящиеся случайные числы из 100.

ну типа a[i] := 1+random(99)
так чтобы элементы a[i] не повторялись



 
Palladin ©   (2003-06-29 17:17) [3]

создай массив Src[1..100] заполни числами 1..100 и при заполнении массива результатов A[1..20] удаляй выбранное число из Src


 
ss300 ©   (2003-06-29 17:24) [4]

еще есть варианты?


 
Palladin ©   (2003-06-29 17:26) [5]

:)

бери случайное число от 1..100 проверяй есть ли оно в массиве результатов, если нет то добавляй, если есть, то еще одна итерация...


 
MBo ©   (2003-06-29 17:26) [6]

приведенный Palladin - лучший.
Можешь, конечно, проверять, есть ли уже число в массиве.


 
Palladin ©   (2003-06-29 17:28) [7]

:)

еще вариант

заполняешь A[1..20] от 1 до 20, потом n раз меняешь a[random(19)+1] и a[random(19)+1], потом n(<20) раз прибавляешь к a[random(19)+1] число random(79)+1


 
ss300 ©   (2003-06-29 17:30) [8]

ну хрен знает как проверять?! мож подскажете?


 
ss300 ©   (2003-06-29 17:32) [9]

Paladin ты можешь человеческим языком объяснить ? :-))))
нихрена не понял


 
Anatoly Podgoretsky ©   (2003-06-29 17:34) [10]

Значит рано заниматься случайными числами, массивами и циклами, при том очень рано, поскольку это входит в начальные знания.


 
Palladin ©   (2003-06-29 17:37) [11]

так и скажи что код надо...

var
i,i1,i2:byte;
a:array [1..20] of byte;
begin
randomize;
for i:=1 to 20 do a[i]:=i;
for i:=1 to random(20)+20 do
begin
i1:=random(19)+1;
i2:=random(19)+1;
a[i1]:=a[i1]+a[i2];
a[i2]:=a[i1]-a[i2];
a[i1]:=a[i1]-a[i2];
end;
for i:=1 to random(19)+1 do
begin
i1:=random(19)+1;
a[i1]:=a[i1]+random(79)+1;
end;
end;

проверь... тут писал...
заодно разберись с финтом по поводу обмена двух численных переменных без использования третьей :)


 
ss300 ©   (2003-06-29 17:48) [12]

Anatoly Podgoretsky.Enabled:=False;

Палладин, всё-таки числа повторяются :-(( но редко
чё делать? :-)


 
Palladin ©   (2003-06-29 17:52) [13]

да действительно...
третий способ лажа...

делай первый,
а по поводу Enable:=false, я бы не торопился с этим...


 
ss300 ©   (2003-06-29 18:16) [14]

Anatoly Podgoretsky.Enabled:=true; :-))
поднимаю вопрос :)))


 
Palladin ©   (2003-06-29 18:17) [15]

ну в чем у тебя проблема то? план действий есть, реализуй!


 
ss300 ©   (2003-06-29 19:33) [16]

Вот так надо было :)))))

for i:=1 to 20 do b[i]:=0;
for i:=1 to 100 do
a[i]:=i;

i:=1;
randomize;
while i<=20 do
begin
t :=1+random(99);
if a[t]<>0 then
begin
b[i]:=a[t];
a[t]:=0;
i:=i+1;
end;
end;


 
Palladin ©   (2003-06-29 19:41) [17]

"Ну вот! А то мама, мама!"


 
ss300 ©   (2003-06-29 19:42) [18]

Anatoly Podgoretsky.Enabled:=False; :-)))



 
Anatoly Podgoretsky ©   (2003-06-29 22:34) [19]

randomize; не по месту, нужно до цикла


 
Mihey ©   (2003-06-29 22:56) [20]

>Anatoly Podgoretsky.Enabled:=False;

В таком случае название объекта с грамматической точки зрения дано неверно, надо было дать название Anatoly_Podgoretsky.

Теперь о наших баранах. Есть процедурка:

procedure FillArray(var A: array of Integer);
var

I, S, R: Integer;
begin

for I := 0 to High(A) do A[I] := I;
for i := High(A) downto 0 do begin
R := Random(I);
S := A[R]; A[R] := A[I]; A[I] := S;
end;
end;

Она заполняет массив некоторого размера N случайными неповторяющимися числами. Допустим, есть массив размером 100. Тогда будет подряд сто неповторяющихся чисел, а знчит не будут повторяться и первые двадцать элементов.

Конечно, кто-то решит, что это некорректно - заполнять огромный массив из-за 20 чисел, но довольно простое решение.


 
ss300 ©   (2003-06-29 23:38) [21]

to: Anatoly Podgoretsky
ну.... до цикла же стоит :) до while
to: Mihey
следи за словами.. :) сам ты баран.. твой метод нихрена не работает.... метод Палладина идеально пашет. :))


 
Palladin ©   (2003-06-29 23:42) [22]


> Mihey © (29.06.03 22:56)

ты не понял фенечки
массив 1..20, а числа 1..100, и если уж на то пошло то смотри
Palladin © (29.06.03 17:37) цикл номер 1 и 2


 
app ©   (2003-06-29 23:59) [23]

ss300 © (29.06.03 23:38)
Вообще до любого цикла и вообще должно быть только один раз в программе, где нибудь в инициализационной части. В принципе можно и здесь, не обратил внимания на структуру циклов - это моя невнимательность.


 
Mihey ©   (2003-06-30 00:14) [24]

2 ss300 & Palladin:

Нет ребята, это вы невнимательно меня читали. Вот код:

procedure FillArray(var A: array of Integer);
var
I, S, R: Integer;
begin
for I := 0 to High(A) do A[I] := I;
for i := High(A) downto 0 do begin
R := Random(I);
S := A[R]; A[R] := A[I]; A[I] := S;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a: array[1..100] of Integer;
i: Integer;
begin
Randomize;
FillArray(a);
For i := 1 to 20 do
begin
Label1.Caption := Label1.Caption + IntToStr(a[i]) + #13;
end;
end;

При нажатии кнопки в Label1 в колоночку записывается 20 чисел в диапазоне от 1 до 100, причём числа не повторяются. Так что, Mihey forevaaaa!


 
ss300 ©   (2003-06-30 00:22) [25]

да действительно Михей ты форева! :) пашет :)
большой казахский рахмет вам ребята.. Особенно Палладину,Михею и мне.. )
Palladin.Enabled:=True;
Mikhey.Enabled:=True;



 
k-man ©   (2003-06-30 17:25) [26]


> ss300 © (30.06.03 00:22)

Диагноз: Ламер.


 
Poirot ©   (2003-06-30 18:52) [27]


> k-man ©

уточняю диагноз: свирепый заблуждающийся ламер :)



Страницы: 1 вся ветка

Текущий архив: 2003.07.14;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.018 c
3-44582
dimm
2003-06-20 14:33
2003.07.14
Есть IbQuery, DataSource и IBUpdateSQL. Вывожу в DBGrid ......


14-44830
MetalFan
2003-06-26 11:35
2003.07.14
NVidia GeForce 2 Pro (64mb)


3-44613
Fants
2003-06-21 15:47
2003.07.14
РАСПРОСТРАНЕНИЕ и INTERBASE


1-44706
APTEMKA
2003-06-28 00:27
2003.07.14
Поиск в HTML


1-44757
dima_matrix
2003-06-28 21:11
2003.07.14
VC объектные файлы в Delhi