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;
}
添加回答
舉報