我正在做一些Java练习,这就是其中之一。我这样做了:
int odds[] = new int[22];
int storedNo = -5;
for (int i = 0; i < odds.length; i++) {
odds[i] = storedNo;
storedNo += 2;
}
哪个有效。但是,我看了答案,它说要做到这一点:
int[] odds = new int[22];
for (int i = 0; i < 22; i++) {
odds[i] = i * 2 - 5;
}
我的问题是,他们是如何得出答案的?,特别是i * 2 - 5
部分?我不知道如何考虑数学来得到答案。
答案 0 :(得分:2)
考虑它的一个简单方法是它为整数值y = 2x - 5
计算等式x in [0, 21]
。
他们是如何得出这个解决方案的?一种方法是查看第一个和最后一个点。我们知道第一个奇数是x = 0
,y = -5
,最后一个是x = 21
,y = 37
。两个点足以求解线性方程y = mx + b
:
从第一点开始
(-5) = m(0) + b
=> b = -5
从第二点开始我们
(37) = m(21) + b
=> 37 = 21m - 5
=> 21m = 42
=> m = 2
因此我们的解决方案是y = 2x - 5
。这也遵循直观的观察,即连续的奇数具有2的差异,并且该线的y截距应该是最小的数字。
答案 1 :(得分:0)
只需按照数学计算即可了解其工作原理。你得到的第一个奇数是-5,所以当你的循环变量为0时,i * 2 - 5会给你-5开始。当我在每次循环迭代中增加1时,你将会有一个结果是“2”比前一个更大。
0 * 2 - 5 = -5
1 * 2 - 5 = -3
2 * 2 - 5 = -1
...
21 * 2 -5 = 37