在变量之间创建运算符的排列

问题描述 投票:0回答:1

假设我有以下输入向量

vector<string> variables = { "A", "B", "C", "D" };
vector<string> operators = { "+" };

因此,我希望获得这些变量之间所有不同的运算符排列。变量始终位于固定位置-只有操作员会更改。

对于先前的输入向量,我需要具有以下输出:

A + B + C + D

这很简单,因为只有一个运算符可用(“ +”)。但是,如果我有以下输入向量:

vector<string> variables = { "A", "B", "C", "D" };
vector<string> operators = { "+", "-" };

然后需要以下输出:

A + B + C + D
A - B + C + D
A + B - C + D
A + B + C - D
A - B - C + D
A + B - C - D
A - B + C - D
A - B - C - D

现在,我有了这些运算符在变量之间的所有可能变体。

到目前为止,我编写了以下函数

template<class T>
vector<vector<T> > getAllPermutations(vector<T> input) {
    vector<vector<T> > res;
    do {
        vector<T> current_vector;
        for (T index : input)
            current_vector.push_back(index);
        res.push_back(current_vector);
    } while (next_permutation(input.begin(), input.end()));
    return res;
}

但是这只能解决部分问题,因为我不知道每次需要调用此函数时如何生成正确的输入向量。

如何解决?

c++ permutation
1个回答
0
投票

[如果您将operators的大小看成是一个数字基数,而将variables的大小看成一个数字(由基数表示),则可能会有所帮助。因此,对于您使用"+""-"的示例,您有两个operators,这意味着基数是2,这很简单,因为它是二进制算术。如果您有四个operators(通过添加例如"*""/"),则基数为4。您使用基数创建的数字中的“数字”数(以您的示例为准)为variables.size() - 13

© www.soinside.com 2019 - 2024. All rights reserved.