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
Loops 与嵌套循环有关的难题_Loops_Time_For Loop_Nested Loops - Fatal编程技术网

Loops 与嵌套循环有关的难题

Loops 与嵌套循环有关的难题,loops,time,for-loop,nested-loops,Loops,Time,For Loop,Nested Loops,对于给定的输入N,所包含的语句执行多少次 for i in 1 … N loop for j in 1 … i loop for k in 1 … j loop sum = sum + i ; end loop; end loop; end loop; 有人能想出一个简单的方法或公式来做这件事吗。请解释。 首先,我编写了一个C代码来生成sum: 然后,尝试通过一些图表来探索这是如何工作的?: 对于,N=1: 即(1)+(1+2)=4 对于,N=3: 最

对于给定的输入N,所包含的语句执行多少次

for i in 1 … N loop
  for j in 1 … i loop
    for k in 1 … j loop
      sum = sum + i ;
    end loop;
  end loop;
end loop;
有人能想出一个简单的方法或公式来做这件事吗。请解释。

  • 首先,我编写了一个
    C
    代码来生成sum:
  • 然后,尝试通过一些图表来探索这是如何工作的?:

    对于,
    N=1

即(1)+(1+2)=4

对于,
N=3

最后,我可以理解三个循环中
N
的总和是:

(1) +(1到2的和)+…+(1到(N-2)之和)+(1到(N-1)之和)+(1到N之和)

或者我们可以这样写:

=>(1)+(1+2)+…+(1+2++…+i)+…+(1+2+..+N-1)+(1+2+..+N)

=>(N*1)+((N-1)*2)+((N-2)*3)+…+((N-i+1)*i)+…+(1*N)

有关简化计算,请参见此处:

[你的答案]

=(((N)*(N+1)*(N+2))/6)

而且,我认为这是正确的。我检查如下:

N = 1,    (1 * 2 * 3)/6  = 1

N = 2,    (2 * 3 * 4)/6 = 4

N = 3,    (3 * 4 * 5)/6 = 6

N = 4,    (4 * 5 * 6)/6 = 10

N = 5,    (5 * 6 * 7)/6 = 35   
此外,该算法的复杂度为O(n3)

编辑

下面的循环也具有相同的计数数,即
=((N)*(N+1)*(N+2))/6)

for i in 1 … N loop
  for j in i … N loop
    for k in j … N loop
      sum = sum + i ;
    end loop;
  end loop;
end loop;

您到底想实现什么?@Rhys对于这样的程序,每当您需要遍历整个程序或编写一个干运行表来计算所附语句的执行次数时。但是,有没有一种通用的方法可以通过查看for循环的条件来解决这个问题?添加非常类似的问题链接:
i<=N,     (i=1)       
            |
j<=i,     (j=1)       
            |
k<=j,     (K=1)       
            |
sum=0.    sum++       ---> sum = 1
i<=N,     (i=1)-------(i=2)
            |     |-----|-----|
j<=i,     (j=1) (j=1)      (j=2)
            |     |     |----|----|
k<=j,     (K=1) (K=1) (K=1)    (K=2)               
            |     |     |        |    
sum=0,    sum++  sum++ sum++   sum++  --> sum = 4
i<=N,     (i=1)-------(i=2)--------------------(i=3)
            |     |-----|-----|        |---------|-------------|
j<=i,     (j=1) (j=1)      (j=2)     (j=1)      (j=2)        (j=3)
            |     |     |----|----|    |     |----|----|    |-----|-----|
k<=j,     (K=1) (K=1) (K=1)    (K=2) (K=1) (K=1)    (K=2) (K=1) (K=2) (K=3)
            |     |     |        |     |     |        |     |     |        |
sum=0,    sum++  sum++ sum++  sum++ sum++  sum++    sum++  sum++ sum++  sum++
            --> sum = 10
N = 1, (1)    = 1                                           

N = 2, (1) + (1 + 2)    = 4

N = 3, (1) + (1 + 2) + (1 + 2 + 3)  = 10

N = 4, (1) + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4)  = 20

N = 5, (1) + (1 + 2) + (1 + 2 + 3) + (1 + 2 + 3 + 4) + (1 + 2 + 3 + 4 + 5)  = 35
N = 1,    (1 * 2 * 3)/6  = 1

N = 2,    (2 * 3 * 4)/6 = 4

N = 3,    (3 * 4 * 5)/6 = 6

N = 4,    (4 * 5 * 6)/6 = 10

N = 5,    (5 * 6 * 7)/6 = 35   
for i in 1 … N loop
  for j in i … N loop
    for k in j … N loop
      sum = sum + i ;
    end loop;
  end loop;
end loop;