《没那么简单》之到底喝了几瓶,java算法实现

背景

在看小品的时候,看到郭哥演的《没那么简单》,想起了之前参加蓝桥杯的时候也有这么一个算法题,于是乎,闲来无事,用算法实现一下小品里面到底有多少瓶的问题

第一个规则

三个空瓶可以换一瓶

第二个规则是

三个空瓶可以换一瓶,两个瓶盖可以换一瓶

上代码

一开始写的时候,初始的瓶数是写成静态常量,后来为了方便多次测试,才用了while循环

package com.example.bottlealgorithm.demo;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.Scanner;

public class DemoApplication {

    private static int totalNum = 5;//初始有的瓶数
    private static int remainBottleNum =0;//剩余的空瓶数
    private static int remainCapNum =0;//剩余的瓶盖数
    public static void main(String[] args) {
//        BottleAlgorithm( totalNum);
        while(true){
            Scanner scanner = new Scanner(System.in);
            totalNum = Integer.valueOf(scanner.nextInt());
            BottleAlgorithmRoundTwo( totalNum, totalNum);
            System.out.println(totalNum);
        }

    }

    /**
     *  规则:每三个空瓶可以换一瓶水
     * @param bottleNumber 瓶子总数
     * @return 兑换回来的瓶子
     */
    public static int BottleAlgorithm(int bottleNumber){

        int retNum = bottleNumber/3;//可以换回的瓶数
        totalNum += retNum;
        int remainNum = bottleNumber%3;//剩余的空瓶数
        if(retNum+remainNum>=3){
            BottleAlgorithm(retNum+remainNum);
        }
        return retNum;
    }

    /**
     *  规则:每三个空瓶可以换一瓶水,
     *  在上面的基础上加一条规则:两个瓶盖可以换一瓶水
     * @param bottleNumber 空瓶子总数
     * @return 兑换回来的瓶子
     */
    public static int BottleAlgorithmRoundTwo(int bottleNumber,int capNumber){

        int retBottleNum = bottleNumber/3;//空瓶可以换回的瓶数
        int retCapNum = capNumber/2;//瓶盖可以换回的瓶数
        int totalRetNum = retBottleNum+retCapNum;//换回的总数
        totalNum += totalRetNum;
        remainBottleNum = bottleNumber%3;//剩余的空瓶数
        remainCapNum = capNumber%2;//剩余的瓶盖数
        if(totalRetNum+remainBottleNum>=3||totalRetNum+remainCapNum>=2){
            BottleAlgorithmRoundTwo(totalRetNum+remainBottleNum,totalRetNum+remainCapNum);
        }
        return totalRetNum;
    }
}

如果广大的网友有什么好的建议或者写法,欢迎评论区留言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值