![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Подскажите алгоритм...
Alex_Sudakov © (2002-08-29 12:14:00)Господа, подскажите красивый алгоритм заполнения массива случайными числами, при чем числа повторятся не должны. Массив - array of integer;
DiamondShark (2002-08-29 13:09:00) [1]
> ЗЫ Забыл уточнить - массив нужно залить случайными числами
> в диапазоне Low(Array) to High(Array).
Тогда очень просто
for i := Low(MyArray) to High(MyArray) do
MyArray[i] := i;
for i := Low(MyArray) to pred(High(MyArray)) do
SwapElement(i, i + Random(High(MyArray)-i+1));
Alex_Sudakov (2002-08-29 13:07:00) [2]2MBo Спасибо, действительно работает...:)
2Anatoly Podgoretsky Вообще-то информация была исчерпывающей...
Anatoly Podgoretsky (2002-08-29 12:41:00) [3]Это бы можно было делать, если бы Alex_Sudakov чуть больше чем сказад
Jeer (2002-08-29 12:36:00) [4]Красивый - такой:
Заполнить массив заданного размера линейно.
Многократно выполнить обмен для случайных i,j ячеек.
MBo (2002-08-29 12:35:00) [5]в списке каждое число уникально, при добавлении в массив оно удаляется.
procedure TForm1.Button1Click(Sender: TObject);
var i,k:integer;
list:tlist;
begin
randomize;
list:=tlist.create;
for i:=0 to 9 do
list.add(pointer(i));
for i:=0 to 9 do begin
k:=random(list.count);
memo1.lines.add(inttostr(Integer(list[k])));
list.delete(k);
end;
вывод:
0
4
6
2
8
1
3
9
5
7
Alex_Sudakov (2002-08-29 12:30:00) [6]Ни какой разницы. Все равно буду повторяющиеся варианты.
MBo (2002-08-29 12:29:00) [7]извиняюсь
for i:=0 to 9 do
list.add(pointer(i));
Alex_Sudakov (2002-08-29 12:28:00) [8]Посмотри еще раз. :)
MBo (2002-08-29 12:27:00) [9]>повторяющиеся варианты
нет.
Alex_Sudakov (2002-08-29 12:26:00) [10]2MBo В данном алгоритме будут повторяющиеся варианты.
Alex_Sudakov (2002-08-29 12:25:00) [11]А так хочется...:) И все же, неужели не существует КРАСИВОГО алгоритма? :(
MBo (2002-08-29 12:24:00) [12]for i:=0 to 9 do
list.add(pointer(random(10));
for i:=0 to 9 do begin
k:=random(list.count);
rndarr[i]:=Integer(list[k]);
list.delete(k);
end;
Skier (2002-08-29 12:23:00) [13]>Alex_Sudakov
Чудес не бывает...
Alex_Sudakov (2002-08-29 12:23:00) [14]И?
PS Здравствуй, Анатолий :)
Anatoly Podgoretsky (2002-08-29 12:22:00) [15]Если ты больше ничего сказать не хочешь, то тогда генерируешь число и сравниваешь со всеми предыдущими
Alex_Sudakov (2002-08-29 12:21:00) [16]Спасибо, но это несколько не то...:) Про Random я и сам догадался, а вот с дубликатами это проблема. Если делать Random(5) то скажем что-бы получить 3 можно этот рандом неделю вызывать. А может с первого раза...
ЗЫ Забыл уточнить - массив нужно залить случайными числами в диапазоне Low(Array) to High(Array).
Skier (2002-08-29 12:15:00) [17]>Alex_Sudakov
Тебе помогут : Random(...) и Randomize.
А дубликаты,IMHO, придётся самому искать...