Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];

Вниз

Выбрать из ста 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.009 c
1-44641
KILLER_ABV
2003-07-02 11:21
2003.07.14
TWebBrowser, как достучатся до его TPopupMenu


3-44548
Rel_
2003-06-19 16:33
2003.07.14
PL/SQL


3-44608
pasha676
2003-06-21 16:07
2003.07.14
Колонки в QReport


1-44695
Dmitriy M. Volkov
2003-06-29 11:42
2003.07.14
неск. строк в TLabel


3-44570
DevMaster
2003-06-20 12:09
2003.07.14
dxMasterView





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский