输入总成本。
输出:给出所需成本的所有水平组合。
每个堆栈的每个级别都花费不同的金额(堆栈 1 中的级别 1 与堆栈 2 中的级别 1 的成本不同)。我有一个函数,可以根据我手动输入(硬编码)的基本成本(级别 1)将级别转换为实际成本。
我需要找到能给我输入成本的级别组合。我意识到有不止一种可能的解决方案,但我只需要一种方法来遍历每一种可能性。
这是我需要的:
input = 224,这是一个的解决方案:
我正在制作一个简单的程序,需要选择不同堆栈的级别,然后计算成本,并且我需要知道存在的每一种可能的成本......每个堆栈的每个级别都需要不同的金额,但是这不是问题,问题是如何为每个堆栈选择一个级别。
我可能解释得很含糊,所以这是一张图片(你不得不原谅我糟糕的绘画技巧):
因此,所有堆栈的级别为 0,级别 0 始终花费 0 金钱。
附加信息:
- 我有一个名为“maxLevels”的数组,该数组的长度是堆栈的数量,每个元素是该堆栈中最高级别的数量(例如,maxLevels[0] == 2)。<
- 您可以从第 1 级开始迭代,因为第 0 级根本不重要。
- 所选级别应保存在类似于 maxLevels(相同长度)的数组(名称:“currentLevels”)中,但它不包含堆栈的最大级别,而是包含堆栈的选定级别(例如: 当前水平[3] == 2).
- 我正在用 C++ 编程,但伪代码也很好。
- 这不是家庭作业,我这样做是为了好玩(基本上是为了游戏)。
最佳答案
我不确定我是否理解这个问题,但以下是如何从每个堆栈中选择一个项目的所有可能组合(在本例中为 3*1*2*3*1 = 18 种可能性):
void visit_each_combination(size_t *maxLevels, size_t num_of_stacks, Visitor &visitor, std::vector<size_t> &choices_so_far) {
if (num_of_stacks == 0) {
visitor.visit(choices_so_far);
} else {
for (size_t pos = 0; pos <= maxLevels[0]; ++pos) {
choices_so_far.push_back(pos);
visit_each_combination(maxLevels+1, num_of_stacks-1, visitor, choices_so_far);
choices_so_far.pop_back();
}
}
}
您可以将 visitor.visit
替换为您想对每个组合执行的任何操作,以使代码更加具体。我使用了 vector choices_so_far
而不是数组 currentLevels
,但它也可以与数组一起使用。
关于c++ - 给定一组不同高度的堆栈,我如何选择所有可能的组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602910/