每个

时间:2015-08-06 09:30:19

标签: c++ excel vba excel-vba combinations

我有几列数据,我想要合并的行数相同,并获得它们之间所有可能的产品组合。 例如,如果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产品组合,但我已经卡在那里。

1 个答案:

答案 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;
}

Live Demo