Перетасовка колоды карт
Я делаю класс Deck для С++-программы. Он должен иметь два метода: один, чтобы вытащить карту с верхней части колоды, другой - чтобы перетасовать колоду. Я заинтересован в последнем.
Карты представлены как целые числа от 1 до 52 включительно. Какой самый быстрый алгоритм для перетасовки колоды (предполагая "хороший" уровень случайности)?
Ответы
Ответ 1
Если вы хотите реализовать тасовку самостоятельно, очень простой, но также функциональный алгоритм перетасовки: Fisher-Yates shuffle.
Чтобы перетасовать массив a из n элементов:
for i from n − 1 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]
Конечно, стандартная библиотека С++ также имеет такие вещи, как это реализовано для вас, например std::random_shuffle
, включенное через <algorithm>
заголовок.
Ответ 2
Используйте std::random_shuffle
, чтобы перетасовать колоду.
Ответ 3
станд:: random_shuffle
http://www.cplusplus.com/reference/algorithm/random_shuffle/
Ответ 4
Здесь мой код
#include<stdlib.h>
#include<iostream>
using namespace std;
int b[52],count=0;
int check(int k)
{ int i=0;
while(b[i++]!=-1)
{
if(b[i]==k)
> Blockquote
return 0;}
b[count++]=k;
cout<<k<<endl;
return 1;
}
void random(int a[])
{
int i=0,p=0,k=0;
for(i=1;i<52;i++)
{ srand(rand()%9);
k=0;
while(!k)
{
p=rand()%52;
k=check(p);
}
}
}
int main()
{
int n=52,i=0,arr[n];
for(i=0;i<52;i++)
{arr[i]=i;b[i]=-1; }
random(arr);
}