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

时间:2014-10-31 04:55:02

标签: c++

我的任务包括编写几个可以协同工作的类,为用户随机排序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
};

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是生成,然后随机播放。要生成,您需要避免浪费时间生成重复项。例如,(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;
}

在这个例子中,我们正在考虑&#39; 0&#39;和空白的多米诺骨牌一样。

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