我有几列数据,我想要合并的行数相同,并获得它们之间所有可能的产品组合。 例如,如果a有4列A,B,C,D的n行,我希望还有11列包含以下列产品:
A*B
A*C
A*D
B*C
B*D
C*D
A*B*C
A*B*D
A*C*D
B*C*D
A*B*C*D
我写了一个VBA和一个C ++程序来获取所有2x2产品组合,但我已经卡在那里。
答案 0 :(得分:0)
假设您的初始列少于32个,您可以这样做:
void print_new_combinations(const std::vector<std::string>& v)
{
assert(v.size() < 32);// else you have to use bigger type.
for (std::uint32_t i = 0; i < (1 << v.size()); ++i) {
if ((i & (i - 1)) != 0) { // filter empty set or unique set
print_combination(v, i);
}
}
}
void print_combination(const std::vector<std::string>& v, std::uint32_t mask)
{
for (std::uint32_t i = 0; i != v.size(); ++i) {
if ((mask & (1 << i)) != 0) {
std::cout << " " << v[i];
}
}
std::cout << std::endl;
}