Java 在不运行程序的情况下计算

Java 在不运行程序的情况下计算,java,Java,我被要求命名变量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); int n=4; int x=1; 对于(inti=1;i

我被要求命名变量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);
int n=4;
int x=1;
对于(inti=1;i而言,
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
这一事实,下次当您看到两个嵌套循环,其中内部索引的范围取决于外部索引时,您应该记住这一点。

有足够的迭代次数,您可以直接将其写出并保持运行计数:

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 

我会拿一支铅笔和一张纸,浏览代码,把x的值写下来作为每个循环。你甚至不必做所有的循环来解决这个问题,因为如果你这样做,就会出现一个模式。将来,请展示你在解决你的问题时做了什么,因为这将提高提问者的质量y倍。看看会发生什么。有两个循环,一个从1到4计数,另一个从1到当前外循环变量计数。因此,内部语句执行十次。与内部循环中执行的实际语句相结合(
x+=x
)你可以自己计算。@Andrew Tyukin当x=2时,最初的输出是2048,而不是1024,其中x=1。内部循环仍然执行了10次,那么你是如何得到2^10部分的呢?@sticky\u嗯,是的,因为
2048=1024*2
?你还期望什么?如果你想把
x
当作一个参数,t显式公式是
x*2^((n+1)*n/2)
,它线性地依赖于
x
的初始值。如果将
x
的初始值加倍,则得到的结果是显式公式的两倍。嵌套循环与显式公式(在Scala中):
def q(n:Int,x0:Int):Int={var x=x0;对于(我@Andrew Tyukin它是2^10,因为x每次都加倍,或者是因为有两个嵌套循环。我只想知道2从何而来进入这个方程。谢谢。@Andrew Tyukin谢谢。现在你得到我的+1:)