假设n是一个正偶数,那么这段代码运行之后x的值是多少?

Assuming that n is a positive even integer, what will be the value of x right after this segment of code is run?

x = 0;
for (i = 1; i <= n/2; i++) {
   for (j = 1; j <=n; j++) { 
      if (j > i)
        x++; 
   }
}

我试图通过捕获求和来预测 x 的值,但我有点卡住了,因为我知道对于第一个 for 循环的每次迭代,内循环的求和都会发生变化。例如,如果我们假设 x 是 10,在第一次完成内部循环后,x 将有 9,然后在第二次完成后,我们将 8 添加到 x,然后是 7、6 等。x 的最终值将是 35 . 我将如何在任何正偶数 n 的内聚方程中表示它?

跳到最后一个简单的方程式;我在这里展示你可能采取的步骤。

首先,这里是原始代码:

x = 0;
for (i = 1; i <= n/2; i++) {
   for (j = 1; j <=n; j++) { 
      if (j > i)
        x++; 
   }
}

我们可以从 i+1 开始 j 来跳过很多无意义的循环

x = 0;
for (i = 1; i <= n/2; i++) {
   for (j = i+1; j <=n; j++) { 
      if (j > i)
        x++; 
   }
}

然后我们可以只添加 n-i.

而不是在每个 n-i 循环上加 1
x = 0;
for (i = 1; i <= n/2; i++) {
   x += (n-i)
}

与此相同(只是写出我们在循环中添加的内容):

x = (n-1) + (n-2) + ... + (n - n/2)

我们可以取出n。

x = n * (n/2) - 1 - 2 - 3 - ... - n/2

最后的简化是对 1 到 n/2 的求和。

x = n * (n/2) - ((n/2) * (n/2 + 1))/2