Подтвердить что ты не робот

Перетасовка колоды карт

Я делаю класс Deck для С++-программы. Он должен иметь два метода: один, чтобы вытащить карту с верхней части колоды, другой - чтобы перетасовать колоду. Я заинтересован в последнем.

Карты представлены как целые числа от 1 до 52 включительно. Какой самый быстрый алгоритм для перетасовки колоды (предполагая "хороший" уровень случайности)?

4b9b3361

Ответ 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, чтобы перетасовать колоду.

Ответ 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);
}