Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Тасование колоды:
Цитата:
Алгоритм #4.
Код: Выделить весь код
    1. ячейки вектора инициализируются значениями своих индексов
    2. R{ight} ← N {"текущая" длина вектора}
    3. генерируется случайное число K из интервала 1..R
    4. обмен содержимым между K-й и R-й ячейками
    5. R ← R-1
    6. if R = 1 then Exit
    7. переход к шагу 3
Приведенный механизм известен под именем алгоритма "тасования колоды". Его легко переписать, используя уже знакомые нам процедуры, приходится лишь заменить интервал 0..N-1 на 1..N.
Код: Выделить весь код
type
  index = 1..N; {N>1}
  massive1 = array [index] of index;

procedure RandomN(var Mas: massive1);
var i, K: index;
begin
  for i := 1 to N do Mas[i] := i;
  Randomize;
  for i := N downto 2 do begin
    K := Random(i) + 1;
    Swap(Mas[K], Mas[i]);
  end;
end;
Соответственно, получение 5 карт можно дать так:
1. Инициализируем массив, от 1 до 52, Перемешиваем массив - RandomN()
2. Берём его первые 5 элементов.

Отправлено: 12:03, 18-04-2005 | #3