Возникла проблемка, надеюсь Вы поможете мне разобраться с этой бякой.
И так : Есть задачка : Вывести 5 уникальных случайных чисел из диапазона 0..10.
Вот код решающий данную задачу и с ним я полностью согласен :
const N=5;by Серж
var
mas : array[1..N] of integer;
i, k, L : integer;
wasBefore : boolean;
begin
Randomize;
mas[1] := Random(35)+1;
for i:=2 to N do begin
repeat
L := Random(35)+1;
wasBefore := false;
for k:=1 to i-1 do
if mas[k]=L then begin
wasBefore := true;
break
end;
until not wasBefore;
mas[i] := L;
end;
{выдача полученных чисел}
for i:=1 to N do Write(mas[i]:3,' ');
WriteLn;
Reaadln;
end.
Но так же один человек предложил такой вариант решения задачи :
Цитата
- сначала заполнить массив нужной длины (в данном случае 10) последовательными числами,
- затем перемешать эти числа (random используется именно на этапе перемешивания).
- затем перемешать эти числа (random используется именно на этапе перемешивания).
Если бы данный алгоритм употреблялся бы к перемешиванию карт в колоде, то я полностью одобрил бы этот алгоритм.. Но в условиях данной задачи, мне кажется, не допустимо использование данного алгоритма.. Почему? - Когда массив уже заполнен, нужно как-то выбрать 5 элементов массива, а как это сделать? - Рандом уже нам не помошник, а писать Write (a[1], a[3], a[34], etc) мне кажется неправильно..
Надеюсь что Вы опровергните или подтвердите мое "мне кажется"
P.S. Задачку мне не сдавать.. Решаю только для себя..
P.P.S. Надеюсь я создал темку в том разделе
Спасибо