【发布时间】:2016-12-21 20:02:03
【问题描述】:
给定一个主数和一个数的子集,想要找到所有可能的子集数的组合,这些子集数加起来就是主数。例如:
输入
主要:10
子集:2、3、5、7
输出
结果:3 + 7 = 10、2 + 3 + 5 = 10
** 注意:5 + 5 = 10 不是有效结果。 **
这是我目前所处的位置:
// Main traversal
for (int a = 0; a < nums.Length; a++)
{
sum = a;
for (int b = a + 1; b < nums.Length; b++)
{
// Thinking this should be the loop that determines
// how many numbers are added together.
// e.g. Sum of 2 numbers, sum of 3 numbers, etc
for (int c = a + 1; c < nums.Length; c++)
{
sum += nums[b + c];
}
if (sum == mainNumber)
result += "Match found!\n";
}
}
我主要是在努力理解“for 循环”。我试图找到一个“for循环”可视化工具,但没有运气。或者,递归会使这个问题更容易解决吗?
【问题讨论】:
-
递归几乎不会让问题更容易理解:)
-
对于可视化工具,将打印语句放在每个 for 循环的正下方,并在每个位置打印
a、b和c的值。这应该可以帮助您trace您的代码实际在做什么,并且可以帮助您更好地可视化它。 -
或者只是附加调试器....更实际的是,您正在尝试做一个组合生成器;我会考虑创建 that 并评估结果(我认为 .NET 中内置了一个)
-
调试器的问题在于它不会留下刚刚发生的事情的良好历史,这使得学习变得更加困难。它们对于现在的状态很好,但对于过去的状态却没有那么好。
-
@MichaelDorgan 你应该在最新的 Visual Studio 中尝试历史调试