假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料???

Java基础 同时被 2 个专栏收录
20 篇文章 0 订阅
1 篇文章 0 订阅

话不多说,直接上代码,四种方式任君选择


public class Drink {

    public static void main(String[] args) {
        add0(50);
        add1(50);
        System.out.println(add(50));
        System.out.println(add(50,0));

    }
    private static void add0(int n) {
        int sum = 0;
        int empty = 1;//喝酒的瓶数
        for (int i = n; i > 0; i--) {
            if (empty != 3) {// 喝酒的瓶数不等于3的时候++,继续喝
                empty++;
            } else {// 喝酒的瓶数等于3的时候,兑换一瓶i++,将喝酒的瓶数置为初始值
                empty = 1;
                i++;
            }
            sum++;
        }
        System.out.println(sum);
    }

    private static void add1(int n) {
        int m = n;//将初始值暂存起来
        int i = 0;//兑换的次数,也等于额外多喝的瓶数
        while (true) {
            n -= 3;// 一次喝三瓶
            n++;   // 兑换一瓶
            i++;   // 也等于多喝一瓶
            if (n < 3) {//剩余瓶数小于3喝完无法兑换,该结账了
                System.out.println(m + i);
                break;
            }
        }
    }

    public static int add(int a) {
        int count = 0;//定义可兑换的瓶数
        int c;
        int i = 0;
        for (c = a; c > 0; c--) {
            i++;
            //每喝到3的倍数瓶的时候,可以兑换1瓶,也就可以多喝一瓶,因此c需要++
            if ((i % 3) == 0) {
                count++;
                c++;
            }
        }
        return a + count;
    }

    public static int add(int a, int b) {
        if (a + b >= 3) {
            //a/3可以在下一轮中兑换到的饮料瓶数
            //a%3是本轮中剩下的空瓶数
            if (a == 2) {
                return a + add(a / 3, a % 3) + (b + 2) / 3;
            }
            return a + add(a / 3, a % 3) + (b + 1) / 3;
        } else {
            return a;
        }
    }

}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值