Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个循环体重复了多少次?_Java_Loops_Language Agnostic - Fatal编程技术网

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
方程。这可能是要记住的主要方程式。