我的任务包括编写几个可以协同工作的类,为用户随机排序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
};
答案 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::array
或std::vector
),然后使用std::shuffle
来移动容器。