4 回答
TA贡献1789条经验 获得超10个赞
这个问题的好处是您不需要编写循环!前 n 个正奇数的和是 n 的平方(在这篇文章中写成 n^2)。这就是用 n 表示总和的方式。所以以下就足够了:
// Calculate the sum of first n positive odd integers by using the n^2 formula.
public static int sumOddIntegers(int n) {
return n*n;
}
如果您打算使用循环,则可以通过观察可以使用公式 (2i-1) 计算第 i 个正奇数整数来执行以下操作:
// Calculate the sum of first n positive odd integers by adding each number iteratively in a loop.
public static int sumOddIntegers(int n) {
int oddSum = 0;
for (int i = 1; i <= n; i++) {
oddSum += (2*i - 1);
}
return oddSum;
}
为了可视化这一点,请考虑以下示例:
n = 1 List: {1} S(n) = 1 = 1 = n^2
n = 2 List: {1, 3} S(n) = 1 + 3 = 4 = n^2
n = 3 List: {1, 3, 5} S(n) = 1 + 3 + 5 = 9 = n^2
n = 4 List: {1, 3, 5, 7} S(n) = 1 + 3 + 5 + 7 = 16 = n^2
n = 5 List: {1, 3, 5, 7, 9} S(n) = 1 + 3 + 5 + 7 + 9 = 25 = n^2
And so on...
这是一个归纳证明,表明前 n 个正奇数的和是 n^2。我是 Stack Overflow 的新手,所以我希望我的格式清晰易读。如果可以改进,请随时提出修改建议 :) Stack Overflow 似乎不支持 LaTeX 样式的指数和下标格式,所以我尽力了。
证明
P(n):前n个正奇数之和为n^2。
基本情况
P(1): n = 1
n = 1 的情况是微不足道的。前 n 个正奇数的列表就是 {1}。因此前 n 个正奇数之和为 1。由于 1 = n = n^2,谓词 P(1) 成立。
归纳假设
假设 P(k) 对任意正整数 k > 0 成立。
感应步骤
给定 P(k),我们将证明 P(k+1) 也成立。换句话说,如果前k个正奇数之和为k^2,则前(k+1)个正奇数之和为(k+1)^2。
作为这个证明的一部分,假设以下引理。
引理1:第n个正奇数可以表示为2n-1。
如果 P(k) 成立,则前 k 个正奇数 {a_1, ... a_k} 的和为 k^2,其中元素 a_k 表示为 2k-1(由引理 1)。因此,将第 (k+1) 个正奇数 a_(k+1) 添加到前 k 个正奇数的列表中将产生前 (k+1) 个正奇数的列表,如下所示: { a_1, ... a_k, a_(k+1)}。因此,这个前 (k+1) 个正奇数的列表之和将等于前 k 个正奇数的列表之和加上 a_(k+1) 的值,即 (k+1) )st 正奇数整数。根据引理 1,第 (k+1) 个正奇数表示为 2(k+1)-1 = 2k+1。
令 S(k) = 前 k 个正奇数之和。因此,S(k) = k^2。上述陈述暗示
S(k+1) = S(k) + a_(k+1), adding the (k+1)st positive odd integer
S(k+1) = S(k) + (2(k+1)-1), by Lemma 1
S(k+1) = S(k) + (2k+1)
S(k+1) = k^2 + (2k+1), by inductive hypothesis
S(k+1) = k^2 + 2k + 1
S(k+1) = (k+1)^2, by factoring
因此,我们证明了如果 S(k) = k^2,则 S(k+1) = (k+1)^2。这表明 P(k) -> P(k+1)。
通过归纳,我们证明了对于任何正整数 n > 0,P(n) 成立。因此,前 n 个正奇数的和为 n^2。QED。
引理 1 的证明:
这是一个归纳证明。
P(n):第n个正奇数,a_n,可以表示为2n-1。
基本情况:P(1):1 是第一个正奇数(情况 n = 1)。
1 = 2(1)-1 = 1.
Therefore, a_1 = 1 = 2n-1. Correct.
归纳假设:假设 P(k) 成立。
归纳步骤:如果 P(k) 成立,则 P(k+1) 成立。
如果P(k)成立,那么第k个正奇数可以表示为2k-1。通过加法,下一个正奇数(第 (k+1) 个正奇数)将是 (2k-1) + 2。
= (2k-1) + 2
= 2k-1 + 2
= 2k+2 - 1
= 2(k+1) -1
我们已经证明了 P(k) -> P(k+1)。因此,通过归纳,P(n) 适用于所有 n > 0 的整数。QED。
祝你好运!希望这有帮助:)
TA贡献1876条经验 获得超5个赞
Stream很好,但是如果您是初学者,那么普通的旧for循环是您最好的朋友。
public static int sumForOddNumbers(int total) {
int sum = 0;
for(int i = 0, odd = 1; i < total; i++, odd += 2) {
sum += odd;
}
return sum;
}
TA贡献1825条经验 获得超6个赞
虽然如果您关心函数式编程,流将是解决此问题的好方法,但仅学习 Java,我会建议以下内容。
int oddValue = 1;
int answer = 0;
for(cntr = 0; cntr < n; ++cntr)
{
//adds oddvalue to your answer
answer += oddValue;
//adds two to odd value (next odd)
oddValue+=2;
}
添加回答
举报