在我的面向对象编程课程中,我们讨论了一个我认为他没有命名过的主题,我试图找出它的名称是什么,以找到一个正确的解决方法这些,但我没有运气。
这不是家庭作业,而是澄清解决这个问题的过程的问题。
for I = (N + 2) downto -1
for J = (I - 1) to (N + 4)
// Code is run here
问题是" // Code is run here
运行了多少次?"
以下是我试图解决的问题:
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) - 1 {{1} } X = -2`
我在处理第二个which simplifies to
循环以及如何完成问题时迷失了方向。我知道我们必须得到for
我只想说我试图寻找这种技术的名称,但他只是简单地称它为“#34; Code Counting"没有返回与此主题相关的任何搜索。
谢谢
编辑:这门课程是用Java编写的,所以如果有人好奇的话,我就会在这个问题上使用Java标签。
EDIT2:澄清一下,这是在 笔试 ,所以我们希望通过纸笔做到这一点,我想解释一下解决这个问题,因为我多次尝试过这个问题但仍然得错了答案。
答案 0 :(得分:3)
只需查看“代码”并开始逻辑计算。在外循环的第一次迭代(称为OL)中,执行内循环(IL)(N + 4) - (N + 2 - 1) + 1
次= 4
次。
+1 的解释:如果我们从-1到2运行循环,我们实际上运行了4次:-1,0,1,2,在数学中是2 - (-1)+ 1。
下一次I = N + 1
,因此IL运行(N + 4) - (N + 1 - 1) + 1
次= 5
次。同样适用于下一步和之后的步骤,执行IL的时间每次增加1: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,实际上不在上面的列表中,我们需要减去它们并得出最终的解决方案:
(N + 7) * (N + 8) / 2 - 6
答案 1 :(得分:1)
问题中显示的算法看起来像旧的基本语法
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