我想根据嵌套循环的深度创建一个函数:
如果深度= 1:
for(i = 0; i < max; i++){
pot[a++] = wyb[i];
}
如果深度= 2:
for(i = 0; i < max; i++){
for( j = i+1; j < max; j++){
pot[a++] = wyb[i] + wyb[j];
}
}
如果深度= 3:
for(i = 0; i < max; i++){
for( j = i+1; j < max; j++){
for( k = j+1; k < max; k++){
pot[a++] = wyb[i] + wyb[j] + wyb[k];
}
}
}
等等。
因此结果将是:
深度= 1
pot[0] = wyb[0]
pot[1] = wyb[1]
...
pot[max-1] = wyb[max-1]
深度= 2,最大= 4
pot[0] = wyb[0] + wyb[1]
pot[1] = wyb[0] + wyb[2]
pot[2] = wyb[0] + wyb[3]
pot[3] = wyb[1] + wyb[2]
pot[4] = wyb[1] + wyb[3]
pot[5] = wyb[2] + wyb[3]
我想你应该已经明白了。我想不出一种巧妙地做到这一点的方法。
有人可以提出一种使用递归的简单方法(或者可能不是吗?)来实现这一目标,同时牢记我仍然是c++的初学者,可以向我指出正确的方向吗?
感谢您的时间。
最佳答案
您可以使用std::next_permutation
来管理组合:
std::vector<int> compute(const std::vector<int>& v, std::size_t depth)
{
if (depth == 0 || v.size() < depth) {
throw "depth is out of range";
}
std::vector<int> res;
std::vector<int> coeffs(depth, 1);
coeffs.resize(v.size(), 0); // flags is now {1, .., 1, 0, .., 0}
do {
int sum = 0;
for (std::size_t i = 0; i != v.size(); ++i) {
sum += v[i] * coeffs[i];
}
res.push_back(sum);
} while (std::next_permutation(coeffs.rbegin(), coeffs.rend()));
return res;
}
Live example
关于c++ - C++可变数量的嵌套循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25138049/