Форум: "Основная";
Текущий архив: 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