如何添加“n”个奇数?

我正在尝试编写一个程序来计算前 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。


红颜莎娜
浏览 154回答 4
4回答

至尊宝的传说

这个问题的好处是您不需要编写循环!前 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) {&nbsp; &nbsp; 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) {&nbsp; &nbsp; int oddSum = 0;&nbsp; &nbsp; for (int i = 1; i <= n; i++) {&nbsp; &nbsp; &nbsp; &nbsp; oddSum += (2*i - 1);&nbsp; &nbsp; }&nbsp; &nbsp; return oddSum;}为了可视化这一点,请考虑以下示例:n = 1 List: {1} S(n) = 1 = 1 = n^2n = 2 List: {1, 3} S(n) = 1 + 3 = 4 = n^2n = 3 List: {1, 3, 5} S(n) = 1 + 3 + 5 = 9 = n^2n = 4 List: {1, 3, 5, 7} S(n) = 1 + 3 + 5 + 7 = 16 = n^2n = 5 List: {1, 3, 5, 7, 9} S(n) = 1 + 3 + 5 + 7 + 9 = 25 = n^2And so on...这是一个归纳证明,表明前 n 个正奇数的和是 n^2。我是 Stack Overflow 的新手,所以我希望我的格式清晰易读。如果可以改进,请随时提出修改建议 :) Stack Overflow 似乎不支持 LaTeX 样式的指数和下标格式,所以我尽力了。证明P(n):前n个正奇数之和为n^2。基本情况P(1): n = 1n = 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 integerS(k+1) = S(k) + (2(k+1)-1), by Lemma 1&nbsp;S(k+1) = S(k) + (2k+1)&nbsp;&nbsp;S(k+1) = k^2 + (2k+1), by inductive hypothesisS(k+1) = k^2 + 2k + 1S(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.&nbsp;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。祝你好运!希望这有帮助:)

慕运维8079593

Stream很好,但是如果您是初学者,那么普通的旧for循环是您最好的朋友。public static int sumForOddNumbers(int total) {&nbsp; &nbsp; int sum = 0;&nbsp; &nbsp; for(int i = 0, odd = 1; i < total; i++, odd += 2) {&nbsp; &nbsp; &nbsp; &nbsp; sum += odd;&nbsp; &nbsp; }&nbsp; &nbsp; return sum;}

德玛西亚99

Java 流 API 提出了非常明确的解决方案:IntStream.iterate(1,&nbsp;i&nbsp;->&nbsp;i&nbsp;+&nbsp;2) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.limit(n) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.sum();IntStream通过链接了解更多信息

胡子哥哥

虽然如果您关心函数式编程,流将是解决此问题的好方法,但仅学习 Java,我会建议以下内容。int oddValue = 1;&nbsp;int answer = 0;&nbsp;&nbsp;for(cntr = 0; cntr < n; ++cntr)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //adds oddvalue to your answer&nbsp; &nbsp; &nbsp; &nbsp; answer += oddValue;&nbsp; &nbsp; &nbsp; &nbsp; //adds two to odd value (next odd)&nbsp; &nbsp; &nbsp; &nbsp; oddValue+=2;&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java