CodeWars - 奇数之和 - For循环

oll*_*lie 3 java for-loop

我试图制作一段接受"n"输入的代码,计算第n行数字和奇数三角形的总和,如下所示:

             1
          3     5
       7     9    11
   13    15    17    19
21    23    25    27    29
Run Code Online (Sandbox Code Playgroud)

等等n = 3,总和就是7 + 9 + 11ie27

我知道n不仅是行号,还等于该行上的数字.所以n = 3也有3个奇数.因此,我认为我可以获得该行的第一个数字,然后只需将前两个数字加2,然后求和.

我的下面的代码不起作用,所以对于输入n=43,我的代码计算总和,3570而它实际上等于79507.

public static int rowSumOddNumbers(int n) {
    int firstNum = (2 * n) - 1;
    int total = 0;
    for (int i = 0; i < n; i++) {
        total += (firstNum + 2);
    }
    return total;
}
Run Code Online (Sandbox Code Playgroud)

我相信我的问题是我没有将前一个数字与当前数字+ 2一起添加.我是否需要存储前一个循环的结果而不是将其添加到当前循环的结果中?

任何帮助赞赏.

Boh*_*ian 14

所述n的总和奇数线是简单地n的立方体:

int rowSumOddNumbers(int n) {
    return n * n * n;
}
Run Code Online (Sandbox Code Playgroud)

我将推导留给了读者.


顺便说一句,你的声明__CODE__应该__CODE__是不正确的.实际上__CODE__.


Raj*_*ngh 5

这是你如何解决这个问题的方法还有其他更快的方法。首先你必须找到第 n 行的第一个数字。你可以看到每一行的起始数字都是一个序列

1 3 7 13 21 ... 
Run Code Online (Sandbox Code Playgroud)

因此第 n 项将是 (n-1)^2 + (n-1)+1

一旦找到,您可以通过从该数字迭代到该行中的项数来找到该行中所有数字的总和

for(int i=0;i<n;i+=2)
{
    sum+=(Nth_Term+i);
}
Run Code Online (Sandbox Code Playgroud)

或者简单地应用AP的n项总和的公式,comman ratio为2

sum= n*( 2*Nth_Term + (n-1)*2)/2 ;  
Run Code Online (Sandbox Code Playgroud)

此外,如果您将第 N 项的值放入上述公式中,您会发现它的计算结果为 n^3.

sum = n*( 2* ((n-1)^2 + (n-1)+1) + (n-1)*2)/2 = n^3 
Run Code Online (Sandbox Code Playgroud)