C ++ Shuffle Deck问题

时间:2018-04-16 17:48:44

标签: c++

我在使用C ++洗牌时遇到了麻烦。 我有一副纸牌课。在课堂上我有一个对象矢量,它是卡片中的卡片,我试图将矢量中的元素随机播放以随机播放卡片。但是,我编写的函数似乎只是在每次迭代中移动所有内容,而不是使用向量中的另一个随机元素进行交换。我确信它的内容非常简单和愚蠢,以至于我失踪了,但我还没有弄明白。任何帮助将不胜感激。 感谢。

void shuffle(int seed = 0)
{
    for (int i = 0; i < 100; i += 1)
    {
        for (unsigned int i = 0; i < deck.size(); i++)
        {
            card *swap = deck[i];

            srand(time(NULL) + seed);
            int temp = rand() % 52;

            deck[i] = deck[temp];
            deck[temp] = swap;
        }
        cout << "shuffled deck: ";
        for (unsigned int i = 0; i < deck.size(); i++)
            cout << deck[i]->compare() << " ";
        cout << endl;
    }
}

这是在循环内部的一个概率函数中调用的。 shuffle函数的种子是循环的迭代。

This is a sample of part of the output in one iteration

1 个答案:

答案 0 :(得分:0)

仅将您的RNG初始化一次,例如在您的 Total_Users Cohort Retention ------------------------------- 2014-1 2014-1 3 2014-2 2014-2 2 2014-3 2014-3 1 ... 功能

main()

然后,最简单的改组方法之一是将每个项目从末尾交换到开头,并使用前面的那些随机元素。请注意,要交换的项目可以相同进行交换 - 这样项目也可以保持原样。

    srand(time(NULL));