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

    技术2024-07-26  11

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

    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; } } }
    Processed: 0.010, SQL: 9