在嵌套for循环中苦苦挣扎

Wal*_*hop 1 c# loops for-loop

给定主数字和数字子集,想要找到加起来主数字的子集数的所有可能组合.例如:

INPUT

主要:10
子集:2,3,5,7

OUTPUT

结果: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";
    }
}
Run Code Online (Sandbox Code Playgroud)

我主要是在努力理解'for循环'.我试图找到一个'for loop'可视化器,但没有运气.或者,递归会使这个问题更容易解决吗?

Cul*_*lub 5

将for循环视为圆圈.嵌套循环就像圆圈内的圆圈.

圆圈内的圆圈

值得庆幸的是,你的情况并不像这个那么复杂.在这张图片中,一个大圆圈是一个只有一次的for循环.在for循环中,其他循环多次都是真的.每个不同大小的圆圈是不同的循环.

我用稍微更具描述性的名称重写了你的代码,并且唯一的目的是解释循环 - 我把所有"有用的"东西拿出来,然后放入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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

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
Run Code Online (Sandbox Code Playgroud)

如果你看缩进,你可以看到一个模式.最靠近文本(左侧)的数字从外环输出.中间的那些来自中间循环,最右边的数字来自最里面的循环.

正如你所看到的,外循环缓慢旋转,数到四(0,1,2,3,4),直到它不再不到五年,此时它退出循环.中间圆圈(循环)计数稍快.每次外循环递增1时,它会变为四次(再次为0-4).并且内圈很快旋转 - 它计数到4并且每次中间圆增量时退出.