Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
ВнизПодскажите алгоритм... Найти похожие ветки
← →
Alex_Sudakov (2002-08-29 12:14) [0]Господа, подскажите красивый алгоритм заполнения массива случайными числами, при чем числа повторятся не должны. Массив - array of integer;
← →
Skier (2002-08-29 12:15) [1]>Alex_Sudakov
Тебе помогут : Random(...) и Randomize.
А дубликаты,IMHO, придётся самому искать...
← →
Alex_Sudakov (2002-08-29 12:21) [2]Спасибо, но это несколько не то...:) Про Random я и сам догадался, а вот с дубликатами это проблема. Если делать Random(5) то скажем что-бы получить 3 можно этот рандом неделю вызывать. А может с первого раза...
ЗЫ Забыл уточнить - массив нужно залить случайными числами в диапазоне Low(Array) to High(Array).
← →
Anatoly Podgoretsky (2002-08-29 12:22) [3]Если ты больше ничего сказать не хочешь, то тогда генерируешь число и сравниваешь со всеми предыдущими
← →
Alex_Sudakov (2002-08-29 12:23) [4]И?
PS Здравствуй, Анатолий :)
← →
Skier (2002-08-29 12:23) [5]>Alex_Sudakov
Чудес не бывает...
← →
MBo (2002-08-29 12:24) [6]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;
← →
Alex_Sudakov (2002-08-29 12:25) [7]А так хочется...:) И все же, неужели не существует КРАСИВОГО алгоритма? :(
← →
Alex_Sudakov (2002-08-29 12:26) [8]2MBo В данном алгоритме будут повторяющиеся варианты.
← →
MBo (2002-08-29 12:27) [9]>повторяющиеся варианты
нет.
← →
Alex_Sudakov (2002-08-29 12:28) [10]Посмотри еще раз. :)
← →
MBo (2002-08-29 12:29) [11]извиняюсь
for i:=0 to 9 do
list.add(pointer(i));
← →
Alex_Sudakov (2002-08-29 12:30) [12]Ни какой разницы. Все равно буду повторяющиеся варианты.
← →
MBo (2002-08-29 12:35) [13]в списке каждое число уникально, при добавлении в массив оно удаляется.
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
← →
Jeer (2002-08-29 12:36) [14]Красивый - такой:
Заполнить массив заданного размера линейно.
Многократно выполнить обмен для случайных i,j ячеек.
← →
Anatoly Podgoretsky (2002-08-29 12:41) [15]Это бы можно было делать, если бы Alex_Sudakov чуть больше чем сказад
← →
Alex_Sudakov (2002-08-29 13:07) [16]2MBo Спасибо, действительно работает...:)
2Anatoly Podgoretsky Вообще-то информация была исчерпывающей...
← →
DiamondShark (2002-08-29 13:09) [17]
> ЗЫ Забыл уточнить - массив нужно залить случайными числами
> в диапазоне 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));
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c