Java 切面条问题

问题

 * 切面条问题
 * 一条线中间砍一刀
 * 先对折一次砍一刀
 * 先对折两次砍一刀
 * ....
 * 对折 n 次,砍一刀后分为多少段

解题

方法一

/**
     * 切面条问题
     * 一条线中间砍一刀
     * 先对折一次砍一刀
     * 先对折两次砍一刀
     * ....
     * 对折 n 次,砍一刀后分为多少段
     * 0   2  (2^0 + 1)
     * 1   3  (2^1 + 1)
     * 2   5  (2^2 + 1)
     */
    public static void oneLineCut(int n){
        if (n < 0){
            System.out.println("n 不能小于0");
            return;
        }

        double line = Math.pow(2, n) + 1;
        int lines = (int)line;

        System.out.println("折叠 " + n + " 次砍一刀,共 " + lines + " 段");
    }

不使用Math 方法二

    public static void oneLineCut2(int n){
        if (n < 0){
            System.out.println("n 不能小于0");
            return;
        }
        // 初始只有一条
        int lines = 1;

        // 从第一刀开始累乘 模拟次方
        for (int i = 1; i <= n; i++){
            lines *= 2;
        }
        // 最终加 1
        lines += 1;

        System.out.println("折叠 " + n + " 次砍一刀,共 " + lines + " 段");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值