题解 | #尼科彻斯定理#

尼科彻斯定理

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));
        }
    }
全部评论

相关推荐

Atica:笑死了我也收到这个,第一时间还以为是婉拒我,然后一看他把卖课名片推过来大彻大悟
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务