给定主号码和数字子集,想要找到加起来主号码的子集号码的所有可能组合。 e.g:
主要: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 loop'可视化器,但没有运气。或者,递归会使这个问题更容易解决吗?
答案 0 :(得分:5)
将for循环视为圆圈。嵌套循环就像圆圈内的圆圈。
谢天谢地,你的情况并不像这个那么复杂。在这张图片中,一个大圆圈是一个只有一次的for循环。在for循环中,其他循环多次都是真的。每个不同大小的圆圈都是不同的循环。我用稍微更具描述性的名称重写了你的代码,并且唯一的目的是解释循环 - 我把所有的&#34;有用的&#34;填写,然后放入console.writeline
语句。
// I'm using 5 as an example check here.
for (int outerLoopCounter = 0; outerLoopCounter < 5; outerLoopCounter++)
{
Console.WriteLine("OUTER: {0}", outerLoopCounter);
for (int middleLoopCounter = 0; middleLoopCounter < 5; middleLoopCounter++)
{
Console.WriteLine("MIDDLE: {0}", middleLoopCounter);
for (int innerLoopCounter = 0; innerLoopCounter < 5; innerLoopCounter++)
{
Console.WriteLine("INNER: {0}", innerLoopCounter);
}
}
}
输出如下:
OUTER: 0
MIDDLE: 0
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 1
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 2
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 3
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 4
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
OUTER: 1
MIDDLE: 0
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 1
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 2
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 3
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 4
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
OUTER: 2
MIDDLE: 0
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 1
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 2
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 3
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 4
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
OUTER: 3
MIDDLE: 0
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 1
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 2
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 3
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 4
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
OUTER: 4
MIDDLE: 0
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 1
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 2
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 3
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
MIDDLE: 4
INNER: 0
INNER: 1
INNER: 2
INNER: 3
INNER: 4
如果你看缩进,你可以看到一个模式。最靠近文本(左侧)的数字从外环输出。中间的那些来自中间循环,最右边的数字来自最里面的循环。
如您所见,外环正在缓慢旋转,数到四(0
,1
,2
,3
,4
),直到它不再小于5,此时它退出循环。中间圆圈(循环)计数稍快。每次外循环递增1时,它会变为四次(再次为0-4)。并且内圈很快就会旋转 - 每次中间圈增量时它会计入四次并退出。