我想创建一个从位掩码返回数字数组(或向量)的函数,我的函数头将是:
vector generateArray(int number, int maskSize)
如果我以这种方式调用此函数:
generateArray(4,2)
4等于100二进制,
它会返回一个带有这些数字的向量:5,6,7,它们是二进制101,110和111.所以函数改变了数字100的所有2个最后一位,以产生所有可能性。
我不知道怎么做......任何想法都会有所帮助!
提前致谢
答案 0 :(得分:1)
您的掩码大小可以被认为是生成可以使用maskSize
位表示的所有数字的一种方法。在您的示例中,2
或2位,其中有2个 2 可能的值:00 01 10 11或0,1,2,3,如果您将其中的每一个添加到number
为您提供4,5,6和7。
所以你要做的是计算从2 maskSize 可以达到的所有数字,并将它们添加到“数字”以填充你的数组。
答案 1 :(得分:0)
这应该可以解决问题 -
void generateArray(int n, int m) {
if (m == 0) {
printf ("%d\n", n);
return;
}
int mask = 1 << (m-1);
generateArray(n & ~mask, m-1);
generateArray(n | mask, m-1);
}
这个c代码打印出数字,但原理是相同的 - 只需修改它以在向量中累积它们,并删除初始参数。