Loops 嵌套循环结果
我真的不知道如何找出嵌套循环的结果。 例如,在下面的伪代码中,我无法确定在执行结束时将给出什么。如果有人给我一个简单的解决方案,我会很高兴的Loops 嵌套循环结果,loops,for-loop,pseudocode,nested-loops,java,c,Loops,For Loop,Pseudocode,Nested Loops,Java,C,我真的不知道如何找出嵌套循环的结果。 例如,在下面的伪代码中,我无法确定在执行结束时将给出什么。如果有人给我一个简单的解决方案,我会很高兴的 r <- 0 for i <- 1 to n do for j <- 1 to i do for k <- j to i+j do r <- r + 1 return r r试着用这样的代码来解决这个问题。。。i、 e.编码它是什么,你认为它应该是什么,并测试它 编辑:根据上述评论进行更新 publ
r <- 0
for i <- 1 to n do
for j <- 1 to i do
for k <- j to i+j do
r <- r + 1
return r
r试着用这样的代码来解决这个问题。。。i、 e.编码它是什么,你认为它应该是什么,并测试它
编辑:根据上述评论进行更新
public class CountLoop{
public static void main(String[] args){
for(int i=1;i<=10;i++)
System.out.println("It's "+run(i)+" and I think "+guess(i));;
}
public static int run(int n){
int r = 0;
for(int i=1;i<=n;i++)
for(int j=1; j <= i;j++)
for(int k=j; k <= i+j; k++)
r += 1;
return r;
}
public static int guess(int n){
// taken from the comments
int r = ((n * (n+1) * (n+2)) /3);
return r;
}
}
所以我们很高兴。我得到了这样的结果:
n = 1: r = 2
n = 2: r = 8
n = 3: r = 20
n = 4: r = 40
n = 5: r = 70
n = 6: r = 112
n = 7: r = 168
n = 8: r = 240
n = 9: r = 330
n = 10: r = 440
假设n=10,
r = 2 + 6 + 12 + 20 + 30 + 42 + 56 + 72 + 90 + 110 = 440
=> r = 2(1 + 3 + 6 + 10 + 15 + 21 + 28 + 36 + 45 + 55)
直觉上,我认为
n = sum(n-1) + n * (n + 1).
在哪里
在伪代码的最内部循环中,k实现并调试它。调试器会给你最好的解释。@thejh no不是一个hw。。。我在学习考试祝你们考试好运。@navidkoochoolok投票问题结束,但真的是一个好问题,一个来自算法的问题。(未本地化)抱歉,我不确定,请尝试像我在链接示例中绘制的那样绘制树,您将找不到此公式…要正确回答此问题,您应该显示此输出如何符合逻辑?我检查了您的链接答案。那很酷。我也达到了1+(1+2)+(1+2+3)+(1+2+3+4)+。。。。。。但在我无法更合理地理解它之后。所以我只是凭直觉找到了答案。我正试图从上面给出的观点理解你的答案。感谢我的回答:),但是你的答案中有一个错误应该是r=2+6+12+20
,8
,而不是6
。如果我画这棵树,它就不同了。它应该是2+6,因为它最终会给出8。看,这个代码中发生的事情是:正如你在我的答案中所看到的:r=2+6+12+20+30+42+56+72+90+110=440=>r=2(1+3+6+10+15+21+28+36+45+55)
因此,它从2开始每次都会以一个连续的数字递增。然后它继续添加3,4,5,6,7,…我能不能不替换k@NavidKoochooloo是的,我替换了k(1+1)+(3+3)
?对于这一点,请注意我为N=2
绘制的树,对于j=2,有3+3
r++
…请再次阅读答案。人们投了反对票/没有投赞成票,因为看起来他并没有投入任何精力。尽管如此,这是一个极好的答案!
n = sum(n-1) + n * (n + 1).
sum(n-1) = value of r for n-1
r <- 0
for i <- 1 to n do
for j <- 1 to i do
for k <- 0 to i do // notice here `j` removed
r <- r + 1
return r
#include<stdio.h>
int main(){
int i =0, k =0, j =0, n =0;
int N =0;
int r =0;
N =10;
for (n=1; n <= N; n++){
// unindented code here
r =0;
for (i=1; i<=n; i++)
for (j=1; j<=i; j++)
for (k=0; k<=i; k++)
r++;
printf("\n N=%d result = %d",n, r);
}
printf("\n");
}
$ ./a.out
N=1 result = 2
N=2 result = 8
N=3 result = 20
N=4 result = 40
N=5 result = 70
N=6 result = 112
N=7 result = 168
N=8 result = 240
N=9 result = 330
N=10 result = 440
1<=i<=1, (i=1)
|
1<=j<=i, (j=1)
/ \
0<=k<=i, (K=0) (K=1)
| |
r=0 r++ r++ => r = 2
( 1 + 1 )
1<=i<=2, (i=1)-----------------------(i=2)
| |---------|------|
1<=j<=i, (j=1) (j=1) (j=2)
/ \ / | \ / | \
0<=k<=i, (K=0) (K=1) (K=0)(K=1)(k=2) (K=0)(K=1)(k=2)
| | | | | | | |
r=0 r++ r++ r++ r++ r++ r++ r++ r++ => 8
-------------- ---------------------------------
( 1 + 1) ( 3 + 3 )
1<=i<=3, (i=1)-----------------------(i=2)--------------------------------------------(i=3)
| |---------|------| |----------------------|----------------------|
1<=j<=3, (j=1) (j=1) (j=2) ( j=1 ) ( j=2 ) ( j=3 )
/ \ / | \ / | \ / | | \ / | | \ / | | \
0<=k<=i, (K=0) (K=1) (K=0)(K=1)(k=2) (K=0)(K=1)(k=2) / | | \ / | | \ / | | \
| | | | | | | | (K=0)(K=1)(k=2)(k=3) (K=0)(K=1)(k=2)(k=3) (K=0)(K=1)(k=2)(k=3)
r=0 r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++ r++
N = 1, (1 + 1) = 2
N = 2, (1 + 1) + (3 + 3) = 8
N = 3, (1 + 1) + (3 + 3) + (4 + 4 + 4)= 20
N = 4, (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5) = 40
N = 5, (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5) + (6 + 6 + 6 + 6 + 6) = 70
N = 6, (1 + 1) + (3 + 3) + (4 + 4 + 4) + (5 + 5 + 5 + 5) + (6 + 6 + 6 + 6 + 6) + (7 + 7 + 7 + 7 + 7 + 7)= 112
(1*2) + (2*3) + (3*4) + (4*5) + (5*6) + (6*7)
(1*2) + (2*3) + (3*4) + (4*5) + (5*6) + ... + (N * (N+1))
N = 1, (1 * 2 * 3)/3 = 2
N = 2, (2 * 3 * 4)/3 = 8
N = 3, (3 * 4 * 5)/3 = 20
N = 4, (4 * 5 * 6)/3 = 40
N = 5, (5 * 6 * 7)/3 = 70