C++生成多米诺骨牌的随机数

C++ Generate random numbers for dominoes

本文关键字:随机数 多米诺骨牌 C++      更新时间:2023-10-16

我的任务包括编写几个类,这些类将协同工作,为用户随机排序28个多米诺骨牌并显示它们。到目前为止,我遇到的主要问题只是在没有任何复制的情况下制造多米诺骨牌。如果你熟悉多米诺骨牌,你就会知道每一半要么是空白的,要么有1-6个点。基本上,我会有一个由28个独特结构(多米诺骨牌)组成的动态数组,但我只是坚持生成这些多米诺骨牌,而没有相同的多米诺骨牌。我曾想过使用FOR循环来遍历并在每个结构中赋值,但我认为必须有一些更简单的方法。

这就是我目前所拥有的;我知道这不多,但我不能也不想在没有正确处理的情况下继续使用排序和显示的编写方法。

class CDominoes{
    public:
    struct Data
    {
        int top;
        int bottom;
        Data()
        {
            top = 0;
            bottom = 0;
        }
    } domino[28];
    //methods to assign spots to halves
};

最简单的解决方案是生成,然后洗牌。要生成,您需要避免浪费时间生成重复项。例如,(4,5)与(5,4)相同,因此不希望同时生成这两个。这意味着您的内部循环应该始终从外部循环的当前值开始。这样做,您将永远不会重复组合。这里有一个例子:

int main () {
    for( int t = 0; t <= 6; ++t ) {
        for( int b = t; b <= 6; ++b ) {
            std::cout << "(" << t << "," << b << ")n";
        }
    }
    return 0;
}

在本例中,我们认为"0"与空白多米诺骨牌相同。

接下来,不要打印这些,而是将它们放入一个随机访问容器(如std::arraystd::vector)中,然后使用std::shuffle打乱容器。