喝啤酒
程序员文章站
2022-06-17 12:28:17
...
package com.ming.test; /** * Drunkard * <p> * 钱2=酒1+瓶1+盖1 * * <p> * 酒1+瓶1+盖1=瓶2 * <p> * 酒1+盖1=瓶1 * * <p> * 酒1+瓶1+盖1=盖4 * <p> * 酒1+瓶1=盖3 * * <p> * 瓶1-盖1=盖3-瓶1 * <p> * 瓶1=盖2 * * <p> * 瓶1=酒2 * <p> * 盖1=酒1 * * <p> * 钱2=酒1+瓶1(酒2)+盖1(酒1)=酒4 * * <p> * 钱10=酒20 * * @author ming * */ public class Drunkard { // 已喝啤酒瓶数 static int drinkTimes; // 剩余可喝啤酒数 static int beerNum; // 剩余空瓶数 static int bottleNum; // 剩余盖子数 static int coverNum; // 兑换啤酒需要的空瓶数 static int bottleExNum; // 兑换啤酒需要的盖子数 static int coverExNum; // 啤酒单价 static int price; // 剩余钱 static int money; /** * 初始化参数 */ static void init() { // 已喝啤酒瓶数 drinkTimes = 0; // 剩余可喝啤酒数 beerNum = 0; // 剩余空瓶数(喝到最后总会剩余1个) bottleNum = 1; // 剩余盖子数(喝到最后总会剩余1个) coverNum = 1; // 兑换啤酒需要的空瓶数 bottleExNum = 2; // 兑换啤酒需要的盖子数 coverExNum = 4; // 啤酒单价 price = 2; // 剩余钱 money = 10; } /** * 买了就喝,喝完接着买 */ static void buyBeer() { if (money >= price) { money = money - price; beerNum++; drinkBeer(); buyBeer(); } } /** * 喝完兑换,换完接着喝 */ static void drinkBeer() { if (beerNum > 0) { beerNum--; drinkTimes++; bottleNum++; coverNum++; exchangeBeer(); drinkBeer(); } } /** * 换完就喝,喝完接着换 */ static void exchangeBeer() { exchangeBeerByBottle(); exchangeBeerByCover(); // exchangeBeerByBottleAndCover(); drinkBeer(); } /** * 用空瓶换 */ static void exchangeBeerByBottle() { if (bottleNum >= bottleExNum) { bottleNum = bottleNum - bottleExNum; beerNum++; exchangeBeerByBottle(); } } /** * 用盖子换 */ static void exchangeBeerByCover() { if (coverNum >= coverExNum) { coverNum = coverNum - coverExNum; beerNum++; exchangeBeerByCover(); } } /** * 用空瓶和盖子组合换 */ static void exchangeBeerByBottleAndCover() { if ((coverExNum % 2 == 0) && (bottleExNum % 2 == 0) && (coverNum >= coverExNum / 2 && bottleNum >= bottleExNum / 2)) { coverNum = coverNum - coverExNum / 2; bottleNum = bottleNum - bottleExNum / 2; beerNum++; exchangeBeerByBottleAndCover(); } } /** * 开始 */ public static void start() { init(); buyBeer(); } public static void main(String[] args) { start(); /*只给赊1瓶*/ System.out.println("剩余钱: " + money); System.out.println("已喝啤酒瓶数: " + drinkTimes); System.out.println("剩余可喝啤酒数: " + beerNum); /* 前面借了空瓶和盖子各1个 */ System.out.println("剩余空瓶数: " + (bottleNum - 1)); System.out.println("剩余盖子数: " + (coverNum - 1)); } }
上一篇: 喝啤酒