题解 | #尼科彻斯定理#
尼科彻斯定理
http://www.nowcoder.com/practice/dbace3a5b3c4480e86ee3277f3fe1e85
根据公式规律得:每个奇数的差值是2, 所以我们只要循环底数的次数就可以得出公式,在此之前则需要先找出公式的第一个奇数是什么。 可以用反推的方式(笨一点的方法):
long cube = bottomNum * bottomNum * bottomNum;
int x = 0;
// 根据底数算出分散在最终公式各个奇数上的总数x
for (int i = 1; i <= bottomNum; i++ ) {
x += 2 * i;
}
// (底数立方积 - x ) / 底数,考虑结果有小数,所以一律向上取整。得出一个平均值
long average = (long) Math.ceil((cube - x) / bottomNum);
// 在平均值的基础上逐步加2的递增倍数值,就可以得到最终公式
for (int j = 1; j <= bottomNum; j++) {
sb.append((average + (j * 2)) + "+");
}
也可以通过规律去找,通过观察:第一个奇数都是(底数平方-(底数-1)),如:4^3=13+15+17+19,公式中的第一个奇数13=4^2-(4-1):
// 完整代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int bottomNum = sc.nextInt();
StringBuffer sb = new StringBuffer();
// 观察公式规律可以得出:公式的第一个奇数都是(底数平方-(底数-1)),即n^2-(n-1)
int base = bottomNum * bottomNum - (bottomNum - 1);
for (int i = 0; i < bottomNum; i++) {
sb.append(base + (i * 2) + "+");
}
String res = sb.toString();
System.out.println(res.substring(0, res.length() - 1));
}
}