这个循环体重复了多少次?
How many times is this loop body repeated?
在我的面向对象编程课程中,我们讨论了一个我认为他从未命名过的主题,我试图找出它的名字是为了找到解决这些问题的正确方法,但我有运气不好。
这不是作业,而是一个问题,用于澄清解决此问题的过程。
for I = (N + 2) downto -1
for J = (I - 1) to (N + 4)
// Code is run here
问题是"How many times is // Code is run here
ran?"
以下是我尝试解决的问题:
1) I = (N + 2)
, J = [(N + 2) - 1]
从这个(和我记得的)你使用 b - a - 1
来解决执行的次数,这给了我们 X = [(N + 2) - 1] - (N + 2) - 1
可以简化为 X = -2
2) I = -1
, J =
((-1) - 1)and
X = ((-1) - 1) - (-1) - 1which simplifies to
X = -2`
我在处理第二个 for
循环以及如何完成问题时迷失了方向。我知道我们必须以 r(r + 1)/2
这样的答案结束
我只是想说,我曾试图寻找这种技术的名称,但他只是简单地称之为 "Code Counting" return 没有任何与此主题相关的搜索.
谢谢
编辑:这门课程在 Java 中,所以如果有人好奇的话,这就是为什么我使用 Java 标签来回答这个问题。
EDIT2:澄清一下,这是在笔试中进行的,所以我们应该通过笔试来完成, 我想解释一下如何解决这个问题,因为我已经尝试了很多次,但仍然得到错误的答案。
只要看看 "code" 并开始逻辑计数。在外循环(称为 OL)的第一次迭代中,您执行内循环 (IL) (N + 4) - (N + 2 - 1) + 1
次 = 4
次。
+1的解释:如果我们运行从-1到2的循环,我们实际上运行它4次:-1 , 0, 1, 2, 在数学上是 `2 - (-1) + 1.
下一次I = N + 1
,因此IL运行s(N + 4) - (N + 1 - 1) + 1
次= 5
次。下一步和之后的步骤也是如此,每次执行IL的次数增加一次:4 + 5 + 6 + ...
。剩下的问题是我们能走多远。
最后一步是I = -1
,IL得到运行(N + 4) - (-1 - 1) + 1 = N + 7
次。
因此您要查找的总和似乎是 4 + 5 + 6 + ... + (N + 6) + (N + 7)
。这实际上类似于 r(r + 1)/2
加上一些减法和加法。
以上数字假定 to
边界包含在内。
注意:每当您想出某种公式时,请选择较小的输入参数(例如 0 或 1)并验证该公式是否适用于该值。
使用小高斯公式 r * (r + 1) / 2
对值求和,我们得到 r -> N + 7
。因此 (N + 7) * (N + 8) / 2
。但是接下来我们把3、2、1也算进去,其实上面的list中没有,我们需要减去它们,得到最终的解:
(N + 7) * (N + 8) / 2 - 6
问题中显示的算法看起来像很好的旧 Basic 语法
for X down/to Y, that includes Y
外循环从n+2
到-1
,所以内循环是
n+1 to n+4 => 4 iterations
...
-2 to n+4 => n+7 iterations
将所有这些相加,我们得到
n+3
∑ (4+i) = 4(n+4) + (n+3)(n+4) / 2
i=0
= (n+11)(n+4) / 2
也等于(N + 7)(N + 8) / 2 - 6
在我的面向对象编程课程中,我们讨论了一个我认为他从未命名过的主题,我试图找出它的名字是为了找到解决这些问题的正确方法,但我有运气不好。
这不是作业,而是一个问题,用于澄清解决此问题的过程。
for I = (N + 2) downto -1
for J = (I - 1) to (N + 4)
// Code is run here
问题是"How many times is // Code is run here
ran?"
以下是我尝试解决的问题:
1) I = (N + 2)
, J = [(N + 2) - 1]
从这个(和我记得的)你使用 b - a - 1
来解决执行的次数,这给了我们 X = [(N + 2) - 1] - (N + 2) - 1
可以简化为 X = -2
2) I = -1
, J =
((-1) - 1)and
X = ((-1) - 1) - (-1) - 1which simplifies to
X = -2`
我在处理第二个 for
循环以及如何完成问题时迷失了方向。我知道我们必须以 r(r + 1)/2
我只是想说,我曾试图寻找这种技术的名称,但他只是简单地称之为 "Code Counting" return 没有任何与此主题相关的搜索.
谢谢
编辑:这门课程在 Java 中,所以如果有人好奇的话,这就是为什么我使用 Java 标签来回答这个问题。
EDIT2:澄清一下,这是在笔试中进行的,所以我们应该通过笔试来完成, 我想解释一下如何解决这个问题,因为我已经尝试了很多次,但仍然得到错误的答案。
只要看看 "code" 并开始逻辑计数。在外循环(称为 OL)的第一次迭代中,您执行内循环 (IL) (N + 4) - (N + 2 - 1) + 1
次 = 4
次。
+1的解释:如果我们运行从-1到2的循环,我们实际上运行它4次:-1 , 0, 1, 2, 在数学上是 `2 - (-1) + 1.
下一次I = N + 1
,因此IL运行s(N + 4) - (N + 1 - 1) + 1
次= 5
次。下一步和之后的步骤也是如此,每次执行IL的次数增加一次:4 + 5 + 6 + ...
。剩下的问题是我们能走多远。
最后一步是I = -1
,IL得到运行(N + 4) - (-1 - 1) + 1 = N + 7
次。
因此您要查找的总和似乎是 4 + 5 + 6 + ... + (N + 6) + (N + 7)
。这实际上类似于 r(r + 1)/2
加上一些减法和加法。
以上数字假定 to
边界包含在内。
注意:每当您想出某种公式时,请选择较小的输入参数(例如 0 或 1)并验证该公式是否适用于该值。
使用小高斯公式 r * (r + 1) / 2
对值求和,我们得到 r -> N + 7
。因此 (N + 7) * (N + 8) / 2
。但是接下来我们把3、2、1也算进去,其实上面的list中没有,我们需要减去它们,得到最终的解:
(N + 7) * (N + 8) / 2 - 6
问题中显示的算法看起来像很好的旧 Basic 语法
for X down/to Y, that includes Y
外循环从n+2
到-1
,所以内循环是
n+1 to n+4 => 4 iterations
...
-2 to n+4 => n+7 iterations
将所有这些相加,我们得到
n+3
∑ (4+i) = 4(n+4) + (n+3)(n+4) / 2
i=0
= (n+11)(n+4) / 2
也等于(N + 7)(N + 8) / 2 - 6