我被要求为变量x的值命名,下面的算法将在运行后输出。我不知道如何在不将其实际写入实际Java程序的情况下进行计算。解决方案应该是1024。如何在纸上计算?
算法:
int n = 4;
int x = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
x += x;
}
}
System.out.println(x);
答案 0 :(得分:6)
每次执行最里面的语句时,x += x
翻倍 x
。
内部循环执行1 + 2 + 3 + 4 = 4 * (4 + 1) / 2 = 10
次。因此,结果必须为2^10 = 1024
。
对于一般的n
,它应该类似于2^((n + 1) * n / 2)
。
1 + 2 + ... + n = (n + 1) * n / 2
有时被称为"Gaussian sum formula"的事实,下次看到两个嵌套的循环时,内部索引的范围取决于外部索引,您应该记住这一点。
答案 1 :(得分:2)
迭代次数很少,您可以将其写出来并保持运行状态:
i = 1
j = 1 to 1
1) x = x + x 2
i = 2
j = 1 to 2
1) x = x + x 4
2) x = x + x 8
i = 3
j = 1 to 3
1) x = x + x 16
2) x = x + x 32
3) x = x + x 64
i = 4
j = 1 to 4
1) x = x + x 128
2) x = x + x 256
3) x = x + x 512
4) x = x + x 1024