假设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
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 循环上加 1x = 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