这个循环体重复了多少次?

时间:2015-12-25 00:45:34

标签: java loops language-agnostic

在我的面向对象编程课程中,我们讨论了一个我认为他没有命名过的主题,我试图找出它的名称是什么,以找到一个正确的解决方法这些,但我没有运气。

这不是家庭作业,而是澄清解决这个问题的过程的问题。

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 = -1J =(( - 1) - 1)and X =(( - 1) - 1) - ( - 1) - 1 {{1} } X = -2`

我在处理第二个which simplifies to循环以及如何完成问题时迷失了方向。我知道我们必须得到for

等答案

我只想说我试图寻找这种技术的名称,但他只是简单地称它为“#34; Code Counting"没有返回与此主题相关的任何搜索。

谢谢

编辑:这门课程是用Java编写的,所以如果有人好奇的话,我就会在这个问题上使用Java标签。

EDIT2:澄清一下,这是在 笔试 ,所以我们希望通过纸笔做到这一点,我想解释一下解决这个问题,因为我多次尝试过这个问题但仍然得错了答案。

2 个答案:

答案 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