题目
给定连续奇数的三角形:
1
3 5
7 9 11
13 15 17 19
21 23 25 27 29
...
从行索引(从索引1开始)计算此三角形的行和,例如:
rowSumOddNumbers(1); // 1
rowSumOddNumbers(2); // 3 + 5 = 8
测试用例:
import static org.junit.Assert.*;
import org.junit.Test;
public class RowSumOddNumbersTest {
@Test
public void test1() {
assertEquals(1, RowSumOddNumbers.rowSumOddNumbers(1));
assertEquals(74088, RowSumOddNumbers.rowSumOddNumbers(42));
}
}
答
我答:
class RowSumOddNumbers {
public static int rowSumOddNumbers(int n) {
int i = n*(n-1)+1;
int sum = 0;
for(int j = 0; j < n; j++){
sum += i;
i += 2;
}
return sum;
}
}
别人的:
class RowSumOddNumbers {
public static int rowSumOddNumbers(int n) {
return n * n * n;
}
}
思考
看完别人的答案,真的想哭呀。怪不得这题被打了“数学”的标签。
解析:
行号为n,该行的起始数为n(n-1)+1,该行的末尾数为起始数加差值[n(n-1)+1] + 2(n-1),则该行数列的和=(起始数+末尾数)*项数/2,即:
sum = {n(n-1)+1 + [n(n-1)+1+2(n-1)]}×n/2=n^3