Java 这个循环体重复了多少次?
在我的面向对象编程课程中,我们讨论了一个我认为他从未命名过的主题,我试图找出它的名称,以找到解决这些问题的正确方法,但我没有运气 这不是家庭作业,而是一个关于解决这个问题的过程的问题Java 这个循环体重复了多少次?,java,loops,language-agnostic,Java,Loops,Language Agnostic,在我的面向对象编程课程中,我们讨论了一个我认为他从未命名过的主题,我试图找出它的名称,以找到解决这些问题的正确方法,但我没有运气 这不是家庭作业,而是一个关于解决这个问题的过程的问题 for I = (N + 2) downto -1 for J = (I - 1) to (N + 4) // Code is run here 问题是“这里运行了多少次代码?” 以下是我试图解决的问题: 1) I=(N+2),J=[(N+2)-1]由此(以及我所记得的),您使用b-a-1
for I = (N + 2) downto -1
for J = (I - 1) to (N + 4)
// 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和
X=(-1)-1)-1,简化为
X=-2`
我在处理for的第二个循环以及如何完成该问题时迷失了方向。我知道我们最终必须得到一个答案,比如r(r+1)/2
我只是想说,我试图寻找这种技术的名称,但他只是称之为“代码计数”,它没有返回任何与此主题相关的搜索
多谢各位
编辑:这门课程是用Java编写的,所以如果有人好奇的话,我就用Java标记来回答这个问题
编辑2:为了澄清,这是一次笔试,所以我们希望通过笔试和纸试,我想解释一下如何解决这个问题,因为我已经尝试了很多次,但最终还是得到了错误的答案。只要看看“代码”,然后开始逻辑计算。在外循环(称为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的执行次数每次增加一次:4+5+6+…
。剩下的问题是我们能走多远
最后一步是I=-1
,在那里,IL运行(N+4)-(1-1)+1=N+7次
因此,您要查找的总数似乎是4+5+6+…+(N+6)+(N+7)
。这实际上是一个类似于r(r+1)/2
的东西,有一些减法和加法
上述数字假设至
边界为包含边界
注意:无论何时提出某种公式,请将输入参数选择为较小的值(如0或1),并验证公式是否适用于该值
使用小高斯公式求和,我们得到了r->N+7
。因此(N+7)*(N+8)/2
。但我们也要计算3、2和1,它们实际上不在上面的清单中,我们需要减去它们,得出以下的最终解:
(N + 7) * (N + 8) / 2 - 6
问题中显示的算法看起来像是很好的旧基本语法
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
是否包含到的边界?你不能只做经典的物理学家方法来获得答案并向后工作吗?只需在循环I中放置一个计数器,然后隔离循环J并执行相同的操作。希望循环IJ中的计数器会给你I中J*计数器中的计数器。你是指O表示法
?我想是的,下面是我们希望得出的答案:(N+7)(N+8)/2-6
编辑:@gian1200我想这可能与它有关,但我们在课程中只简要讨论了Big-O符号,他从未将二者联系起来。@user2589273这不是放在IDE和ran中的代码,而是一个需要在纸上手工解决的问题。我将这个问题的答案贴在你在我的原始帖子上的评论下,答案应该是:[(N+7)(N+8)/2]-6
但我无法完全弄清楚这是怎么回事。@liquidsystem好吧,我目前的解决方案是(N+6)(N+7)/2-3
,非常接近。我猜区别就在于我之前问过的关于包含边界的问题。我们从来没有讨论过他是否会给我们提供包含或独占的问题,所以我想假设它是独占的。另外,我想知道他告诉我们使用的方程式,b-a-1
是否正确,以及如何使用它来“缩短”通过这个循环的时间?@luk2302那么,在这里先看IL再看OL的想法是什么?在过去,我们让两个循环上升到一个值,而不是一个下降到和一个上升到一个值。这里的想法是把外部循环值视为理所当然,并查看内部循环。检查它运行的频率,然后在外循环中执行一个步骤,并检查内循环运行的频率。你需要在内部循环的运行时找到一个模式,就是这样。好吧,把这个印记在我的脑海里记忆的一般想法是很棘手的一部分,因为我们只是简单地讨论了这个想法,然后继续讨论其他的话题,这是一种痛苦,因为最后几次测验包括了像这一次这样的问题,导致我因此而失分!最棘手的部分是在内部迭代计算中不要出错,然后对于这类问题,经常使用sum(1到N)=N(N+1)/2
方程。这可能是要记住的主要方程式。