如何添加'n'个奇数?

Jaf*_*led 4 java loops

我正在尝试编写一个计算前n个正奇数整数之和的程序.

我无法弄清楚如何将n合并到求和中.我已经有一个do/while循环来确保在赋值时得到正值.我知道我必须使用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
Run Code Online (Sandbox Code Playgroud)

例如:如果n = 5,则应计算1 + 3 + 5 + 7 + 9.

Chr*_*ses 6

关于这个问题的好处是,你不需要写一个循环!前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;
}
Run Code Online (Sandbox Code Playgroud)

如果您已设置使用循环,则可以通过观察可以使用公式(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;
}
Run Code Online (Sandbox Code Playgroud)

要想象这一点,请考虑以下示例:

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...
Run Code Online (Sandbox Code Playgroud)

这是通过感应证明前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)st个正奇数整数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)st个正奇数整数表示为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
Run Code Online (Sandbox Code Playgroud)

因此,我们已经表明,如果S(k)= k ^ 2,那么S(k + 1)=(k + 1)^ 2.这表明P(k) - > P(k + 1).

通过归纳,我们已经证明P(n)适用于任何正整数n> 0.因此,前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.
Run Code Online (Sandbox Code Playgroud)

归纳假设:假设P(k)成立.

归纳步骤:如果P(k)成立,则P(k + 1)成立.

如果P(k)成立,则第k个正奇整数可以表示为2k-1.另外,下一个正奇数整数((k + 1)st个正奇数)将是(2k-1)+ 2.

= (2k-1) + 2
= 2k-1 + 2
= 2k+2 - 1
= 2(k+1) -1
Run Code Online (Sandbox Code Playgroud)

我们已经证明P(k) - > P(k + 1).因此,通过归纳,P(n)适用于所有整数n> 0.QED.

祝好运!希望这有用:)


ole*_*nik 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;
}
Run Code Online (Sandbox Code Playgroud)