对于缺少的元素,使用0显示集合的子集

时间:2013-07-03 10:08:07

标签: c++ algorithm

我想用C ++编写一个算法。假设我们有x = {1,2,3,4}。然后结果:

1 2 3 0
1 2 0 4
1 0 3 4
0 2 3 4
1 2 0 0
1 0 3 0
0 2 3 0
1 0 0 4
...
0 2 0 0
1 0 0 0

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以使用4位数字的二进制表示。因此,您将增加此数字并将其用作应用于1 2 3 4的掩码。我希望你不要我们为你编写所有代码。如果有什么不清楚,请随时询问。

答案 1 :(得分:0)

实际上这很简单:

std::vector<int> x; 
/* set x to { 1,2,3,4 } */

std::vector<int> temp(x.size());
byte mask = 0;
for(int i = 0; i < (int)pow(2, x.size()); ++i)
{
   for(int j = 0; j < x.length(); ++j)
   {
       mask = ; // this is the tricky part, set it to bit j of i
       temp.at(j) = x.at(j) * mask;
   }
}