亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何添加“n”個奇數?

如何添加“n”個奇數?

紅顏莎娜 2022-06-15 15:37:06
我正在嘗試編寫一個程序來計算前 n 個正奇數的總和。我無法弄清楚如何將 n 合并到求和中。我已經有一個 do/while 循環,以確保在分配 n 值時獲得正值。我知道我必須使用 for 循環,但我不確定我會如何做到這一點。Scanner input = new Scanner(System.in); // open input stream    String cleanUpStr;                      // clean kbd buffer    int n;                                  // number    int sum;                                // sum of numbers    int cntr;                               // counter for loop    cleanUpStr = "nothing yet";    n = 0;    sum = 0;    cntr = 0;    //prompt user for the value of n    // use a loop to ensure a positive output    do    {        System.out.println("Enter the value of n");        n = input.nextInt();        cleanUpStr = input.nextLine();        // print error if n is invalid        if (n < 0)        {            System.out.println("Invalid n value of " + n + ", try again.");        } // end if    }while(n < 0);    for(cntr = 0; cntr < n; ++cntr)    {    } // end for} // end main例如:如果 n = 5,那么這應該計算 1 + 3 + 5 + 7 + 9。
查看完整描述

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。


祝你好運!希望這有幫助:)


查看完整回答
反對 回復 2022-06-15
?
慕運維8079593

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;

}


查看完整回答
反對 回復 2022-06-15
?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

Java 流 API 提出了非常明確的解決方案:

IntStream.iterate(1, i -> i + 2)
     .limit(n)
     .sum();

IntStream通過鏈接了解更多信息


查看完整回答
反對 回復 2022-06-15
?
胡子哥哥

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;


    }



查看完整回答
反對 回復 2022-06-15
  • 4 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號