java算法买3瓶送1瓶_【算法】啤酒与瓶盖与空瓶(java)
题目描述:
啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒,问:n元钱最多能喝几瓶酒?
解题思路:
在不能借瓶盖的情况下,第一种方法直接暴力求解。
/* 啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒*/
/*n元钱最多能喝几瓶酒?*/
public class ForTest {
static class Solution {
public int canDrink(int money) {
int beer_num=0;
int lid_num=0;
int bottle_num=0;
int ans=0;
while ((money>0&&money%2==0)||lid_num>=4||bottle_num>=2){
if(money>0&&money%2==0){
beer_num=money/2;
lid_num=beer_num;
bottle_num=beer_num;
money-=2*beer_num;
ans+=beer_num;
}
if(lid_num>=4){
beer_num=lid_num/4;
lid_num=lid_num-beer_num*4+beer_num;
bottle_num+=beer_num;
ans+=beer_num;
}
if(bottle_num>=2){
beer_num=bottle_num/2;
lid_num+=beer_num;
bottle_num=bottle_num-beer_num*2+beer_num;
ans+=beer_num;
}
}
return ans;
}
}
public static void main(String[] args) {
Solution s=new Solution();
int ans=s.canDrink(10);
System.out.println(ans);
}
}
第二种方法用递归求解。
/* 啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒*/
/*n元钱最多能喝几瓶酒?*/
public class ForTest {
static class Solution {
public int canDrink(int money, int lib_num, int bottle_num,int ans) {
if ((money <= 0 || money == 1) && lib_num < 4 && bottle_num < 2) {
return ans;
}else {
if (money > 0&&money!=1) {
ans++;
return canDrink(money - 2, lib_num + 1, bottle_num + 1,ans);
}
if (lib_num >= 4) {
ans++;
return canDrink(money, lib_num - 4 + 1, bottle_num + 1,ans);
}
if (bottle_num >= 2) {
ans++;
return canDrink(money, lib_num + 1, bottle_num - 2 + 1,ans);
}
return ans;
}
}
}
public static void main(String[] args) {
Solution s = new Solution();
int ans=s.canDrink(10, 0, 0,0);
System.out.println(ans);
}
}
java算法买3瓶送1瓶_【算法】啤酒与瓶盖与空瓶(java)相关推荐
- JAVA 递归算法- 椰子汁5元一瓶,4个盖子可以换一瓶椰子汁,3个空瓶可以换一瓶椰子汁,那么 100 块钱可以喝多少瓶椰子汁,剩下瓶盖和空瓶各多少?
目录 原题展示 做表理思路 当初始汽水为3瓶时 当初始汽水为4瓶时 分析提取数据逻辑 瓶子的个数的计算 盖子的个数的计算 汽水数目的计算 取模运算 源代码 成功截图 原题展示 椰子汁5元一瓶,4个盖子 ...
- 一瓶汽水1块钱,3个瓶盖换一瓶汽水,2个空瓶换一瓶汽水,假如手里有5块钱,能喝多少瓶汽水
用三种方式实现以下命题: 一瓶汽水1块钱,3个瓶盖换一瓶汽水,2个空瓶换一瓶汽水,假如手里有5块钱,能喝多少瓶汽水 java 采用经典Java OOP方式实现,一目了然. /**已喝掉*/ stati ...
- java 寻找和为定值的多个数_算法笔记_037:寻找和为定值的两个数(Java)
1 问题描述 输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数.如果有多对数的和等于输入的整数,输出任意一对即可.例如,如果输入数组[1,2,4,5,7,11,15]和 ...
- java删除有序数组中的重复元素_算法刷刷刷Leetcode第26题删除排序数组中的重复项...
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度.不要使用额外的数组空间,你必须在原地修改输入数组 并在使用 O(1) 额外空间的条件下完成.示例 ...
- java创建对象new后面为啥可以传入参数_你有认真了解过自己的“Java对象”吗?渣男...
对象在 JVM 中是怎么存储的 对象头里有什么? 作为一名 Javaer,生活中的我们可能暂时没有对象,但是工作中每天都会创建大量的 Java 对象,你有试着去了解下自己的"对象" ...
- java更新新的知识要怎么知道_晟司小蒙告诉你,Java技术知识点,不定时更新!!!...
2017年11月6日 标题:多态 多 态★★★★★(面向对象特征之一):函数本身就具备多态性,某一种事物有不同的具体的体现. 体现:父类引用或者接口的引用指向了自己的子类对象.//Animal a = ...
- java如何调用同目录下的文件_文件目录发生了增删改操作?Java如何实时监控?...
前言 有时候你可能有个疑问,IDE总是可以检测到外部文件是否发生了变化,比如你在某个类里面加了一些代码,这时候的IDE就会弹出一个框说你做了更改.再或者是某个文件夹下的文件发生了改变,比如新建了一个或 ...
- JAVA中几种循环结构的表示_本文通过实例讲解给大家介绍Java中for、while、do while三种循环语句的区别,具体详情如下所示:第一种:for循环 循环结构for语句的格式...
本文通过实例讲解给大家介绍Java中for.while.do while三种循环语句的区别,具体详情如下所示: 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后 ...
- JAVA程序中怎么看线程的个数_一个文件中有10000个数,用Java实现一个多线程程序将这...
18 推荐 运行结果: 编辑于 2015-07-16 17:20:57 回复(11) 12 自己重写了一下推荐答案,加了些注释方便理解 package threadpackage; import ja ...
最新文章
- react-webpack-express
- ORA-12518,TNS:listener could not hand off client connection
- 华为防火墙USG基本配置
- 写得太好了!树莓派安装docker
- ABP官方文档翻译 0.0 ABP官方文档翻译目录
- 《潜伏》走红背后的心理原因
- java poi word 表格_java 使用POI 读写word 表格
- 参会者说丨LiveVideoStackCon 2019上海 音视频技术大会
- php开发入门,PHP开发入门教程之面向对象
- python环境变量的配置_python基础教程-第一讲-带你进入python的世界
- Python使用wordnet工具计算词集与词条基本用法(一)
- SQL Server多实例环境搭建与连接
- MATLAB简介与矩阵定义
- 测试页能打印 软件不能打,打印机可以打印测试页不能打印文档怎么处理
- 认证协议RADIUS篇
- 一木.溪桥---Python之简介、环境搭建、PyCharm配置
- 信道容量迭代算法验证
- 18 在springboot整合thymeleaf模板引擎中@Controller和@RestController不同注解的跳转页面方法
- 欧美风游戏音乐的特点
- Oracle 误删恢复
热门文章
- 百度-视觉技术部招聘计算机视觉相关算法实习生
- CSS——引入阿里字体图标步骤
- 【ParaView教程】第四章 常见问题 —— 怎样在ParaView中将颜色预设默认设为Blue to Red Rainbow?
- ZYNQ学习笔记(3)-局部重构Partial Reconfiguration
- error: cannot use promoted field in struct literal of type [duplicate]
- 大厂php笔试题,【大厂必备】2020超经典PHP面试题
- php图文排版样式模版,20款简约样式,多种类型文章的通用模板!
- C#:Krypton控件使用方法详解(第九讲) ——kryptonRadioButton
- hadoop3-求分组topn
- 用友YonSuite释放商业创新的“蝴蝶效应”