将 -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 = 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 轴截距应该是最小的数。
我正在做一些 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 = 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 轴截距应该是最小的数。