某些情况下我们可以不使用循环而达到循环求解的效果。这里我想介绍一种for循环的优化。
实例情况:已知变量n值,求i值
int sum = 0, int i = 0;
while(sum < n)
sum += ++i;
System.out.println("i = " + i);
注:
int sum = 0, int i = 1;
while(sum < n)
sum += i++;
System.out.println("i = " + i);
上面的这段代码错误!!!原因在于i值比要求的值大1!
继续正题,从实例情况和实例代码中我们可以知道以下两种情况:
1)i(i-1)/2 < n
2)(i+1)i/2 >= n
则只需对(i+1)i/2 >= n一元二次不等式求解,求出i的最小正整数即可。
代码求解如下:
i = Math.ceil((Math.sqrt(8 * n + 1) - 1) / 2);
实例情况:已知变量n值,求i值
int sum = 0, int i = 0;
while(sum < n)
sum += ++i;
System.out.println("i = " + i);
注:
int sum = 0, int i = 1;
while(sum < n)
sum += i++;
System.out.println("i = " + i);
上面的这段代码错误!!!原因在于i值比要求的值大1!
继续正题,从实例情况和实例代码中我们可以知道以下两种情况:
1)i(i-1)/2 < n
2)(i+1)i/2 >= n
则只需对(i+1)i/2 >= n一元二次不等式求解,求出i的最小正整数即可。
代码求解如下:
i = Math.ceil((Math.sqrt(8 * n + 1) - 1) / 2);