将 -6 到 38 之间的所有奇数存储到一个数组中

Store all odd numbers between -6 and 38 into an array

我正在做一些 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 部分?我不知道如何思考数学来得到这个答案。

只需按照数学原理即可了解其工作原理。您拥有的第一个奇数是 -5,因此当循环变量为 0 时,执行 i*2 - 5 会得到 -5。当 i 在每次循环迭代中增加 1 时,您将得到一个结果2 比上一个大。

0 * 2 - 5 = -5

1 * 2 - 5 = -3

2 * 2 - 5 = -1

...

21 * 2 -5 = 37

一个简单的思考方式是它计算方程 y = 2x - 5 的整数值 x in [0, 21]

他们是如何得出这个解决方案的?一种方法是查看第一点和最后一点。我们知道第一个奇数在 x = 0y = -5,最后一个在 x = 21y = 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 轴截距应该是最小的数。