啤酒一瓶2元,二个空瓶可以换一瓶啤酒,四个瓶盖也可以换一瓶啤酒,现在有10元钱,可以最多喝几瓶啤酒

怎么写java程序实现下面的问题:
啤酒一瓶2元,二个空瓶可以换一瓶啤酒,四个瓶盖也可以换一瓶啤酒,现在有10元钱,可以最多喝几瓶啤酒

0

7个回答

这道题根本没有编程的必要,因为它不具备普适性。
可以考虑把单价,钱,换取规则都作为输入,最终可以喝的啤酒瓶数作为输出。

1
 /**     
     * 
     * * @param args     
     */ 
    public static int all = 5;  
    public static int leftBottle;   
    public static int leftTop;  

    public static void main(String[] args) {        
        all += drink(5,5);      
        System.out.println("总共能喝"+all);     
        System.out.println("剩下酒瓶个数"+leftBottle);        
        System.out.println("剩下盖子个数"+leftTop);   
    }   

    public static int drink(int bottle, int top) {      
        if(bottle >=2 || top >=4){          
            leftBottle = (bottle/2) + (bottle%2) + (top/4);         
            leftTop = (top/4) + (top%4) + (bottle/2);           
            return  (bottle/2) + (top/4) + drink(leftBottle,leftTop);       
        }       
        return 0;   
    }

在网上看到的一个解决方法,我觉得挺棒的

1
sinat_35534057
sinat_35534057 好方法 递归 华为面试题
大约 3 年之前 回复

少年 试试看看
public static int getbeer(int num)
{
int sum = num;//初始化总数
//瓶数大于等于2时,可以换
while(num>=2)

{
//新一次更换后总瓶数为更换前瓶数与瓶数/2的和
sum=sum+num/2;

//这是为了保证不会因为奇数瓶摩2少掉一个空瓶
if(num%2==1)

sum++;
num=num/2;
}
//这就是结果
return sum;

}

0

方法内那么多变量会影响虚拟机执行效率 写注释是个好习惯 代码里不该出现实数的

0
 public class BeerGame {

    /**
     * 啤酒总数
     */
    private static int beerNum = 0;

    /**
     * 每次增加的啤酒数,包括购买的,用空瓶换取以及瓶盖换取
     */
    private static int addBeerNum = 0;

    /**
     * 当前空瓶数
     */
    private static int bottleNum = 0;

    /**
     * 当前瓶盖数
     */
    private static int libNum = 0;

    public static void main(String[] args) {
        //首次购买增加啤酒数
        addBeerNum = 10 >> 1;
        //啤酒数目增加后依次更改啤酒总数、当前空瓶数以及当前瓶盖数
        afterAddBeerNumChange(addBeerNum);
        //判断当前空瓶数或瓶盖数是否支持继续兑换
        while(bottleNum >= 2 || libNum >= 4){
            //空瓶数大于2时可兑换
            if (bottleNum >= 2) {
                //获取兑换啤酒数
                addBeerNum = bottleNum >> 1;
                //更改当前空瓶数
                bottleNum = bottleNum % 2;
                //修改啤酒总数、当前空瓶数以及当前瓶盖数
                afterAddBeerNumChange(addBeerNum);
            }
            //瓶盖数大于4时可兑换
            if (libNum >= 4) {
                //获取兑换啤酒数
                addBeerNum = libNum >> 2;
                //更改当前瓶盖数
                libNum = libNum % 4;
                //修改啤酒总数、当前空瓶数以及当前瓶盖数
                afterAddBeerNumChange(addBeerNum);
            }
        }
    }

    /**
     * 啤酒数目增加后操作,依次更改啤酒总数、当前空瓶数以及当前瓶盖数
     * @param addBeerNum 增加啤酒数
     */
    private static void afterAddBeerNumChange(int addBeerNum){
        beerNum += addBeerNum;
        bottleNum += addBeerNum;
        libNum += addBeerNum;
        System.out.println("beerNum = " + beerNum + " bottleNum = " + bottleNum + " libNum = " + libNum);
    }
}

欢迎批评指正

0

public static int drink(int d,int p,int total){
int leftd = d%2; //剩余空瓶数
int leftp = p%4; //剩余瓶盖数
int s = d>>1; //空瓶兑酒数
int f = p>>2; //空盖兑酒数
if(s>0||f>0){
total = drink(leftd+s+f, leftp+s+f,total);
}
return total + s + f ;
}
public static int input(int n){
return drink( n>>1, n>>1, n>>1);
}
public static void main(String[] args) {
System.out.println(input(10));
}

0

public static int Drink(int n,int d,int p,int total){
int drink = n>>1;
int leftd = d + drink%2;
int leftp = p + drink%4;
int s = drink>>1;
int f = drink>>2;
if(s>0||f>0){
total = Drink(drink, leftd, leftp,total);
}
return total + drink + s + f ;
}
public static void main(String[] args) {
System.out.println(Drink(10, 0, 0, 0));
}

-1
yuyang199
yuyang199 回复床前明月ali: 刚刚发的这个是对的了,昨天没验证,sorry
接近 4 年之前 回复
yuyang199
yuyang199 回复床前明月ali: public static int drink(int d,int p,int total){ int leftd = d%2; //剩余空瓶数 int leftp = p%4; //剩余瓶盖数 int s = d>>1; //空瓶兑酒数 int f = p>>2; //空盖兑酒数 if(s>0||f>0){ total = drink(leftd+s+f, leftp+s+f,total); } return total + s + f ; } public static int input(int n){ return drink( n>>1, n>>1, n>>1); } public static void main(String[] args) { System.out.println(input(10)); }
接近 4 年之前 回复
yuyang199
yuyang199 回复yuyang199: public static int drink(int d,int p,int total){ int leftd = d%2; //剩余空瓶数 int leftp = p%4; //剩余瓶盖数 int s = d>>1; //空瓶兑酒数 int f = p>>2; //空盖兑酒数 if(s>0||f>0){ total = drink(leftd+s+f, leftp+s+f,total); } return total + s + f ; } public static int input(int n){ return drink( n>>1, n>>1, n>>1); } public static void main(String[] args) { System.out.println(input(10)); }
接近 4 年之前 回复
yuyang199
yuyang199 回复床前明月ali: 好像是逻辑出了点问题
接近 4 年之前 回复
yuyang199
yuyang199 回复床前明月ali: 第一轮,n代表钱,d是剩余空瓶数,p是剩余瓶盖数。这样能够算到第一轮drink=5,leftd=1(原因为5个空瓶换了2瓶),leftp为1(5个瓶盖换了1瓶),s=2,空瓶换的,f为1,瓶盖换的;
接近 4 年之前 回复
u012903120
xtom0369 少侠求解释,表示看不懂逻辑。而且结果好像有问题,是12还是15呢?
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
啤酒2元一瓶,四个瓶盖可换一瓶啤酒,2个空瓶也可换一瓶啤酒
防痴呆的测试题来啦:啤酒2元一瓶,四个瓶盖可换一瓶啤酒,2个空瓶也可换一瓶啤酒,20元最多可以喝多少瓶?
防痴呆的:啤酒2元一瓶,四个瓶盖可换一瓶啤酒,2个空瓶也可换一瓶啤酒,10元最多可以喝多少瓶
#!/usr/bin/env python2 #-*- coding: utf-8 -*-def calculate_beer(money): total_beer = 0 first_round_num = money / 2 total_beer = +first_round_num bottle_num = first_round_num cap_num
C语言 递归实现 函数 一元钱买一瓶啤酒,两个空瓶换一瓶啤酒.问n元钱能喝多少瓶啤酒?
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。要求: (1) 用递归的方法计算能喝到的啤酒数目。 (2) 函数的原型为 int getNum(int n); (3) 不能定义全局变量。
//啤酒2元1瓶,4个瓶盖可换1瓶,2个空瓶也可换1瓶。请问10元能喝到几瓶啤酒
//啤酒2元1瓶,4个瓶盖可换1瓶,2个空瓶也可换1瓶。请问10元能喝到几瓶啤酒 -(void)beerWithMoney:(NSInteger)money Cap:(NSInteger)cap bottle:(NSInteger)bottle Count:(NSInteger)count{               if(money<2&&cap<4&amp...
关于一瓶啤酒2元,4个瓶盖换1瓶,2个空瓶换1瓶,10元能喝多少瓶的问题求解
设使用空瓶兑换到的瓶数为X(整数) 设使用空瓶兑换到的瓶数为Y(整数) 则总瓶数位5+X+Y 1、 设Y=1,由公式2求出则X={0,1},将X,Y带入公式1,不符合 2、 设Y=2,由公式2求出则X={1,2,3,4},将X,Y带入公式1,不符合 3、 设Y=3,由公式2求出则X={4,5,6,7},将X,Y带入公式1,求解X=7 所以一共喝了5+X+Y=5+3+7=15(瓶
python 解决 啤酒2块钱一瓶,2个酒瓶可以换一瓶酒,4个瓶盖可以换一瓶酒 问10块钱可以喝几瓶酒
#!/usr/bin/env python #coding:utf-8 #啤酒2块钱一瓶,2个酒瓶可以换一瓶酒,4个瓶盖可以换一瓶酒 #问10块钱可以喝几瓶酒 def jipingjiu(money): beer = money / 2 # 不考虑找零 money%2 btt, cap = money/2, money/2 #买过酒得到的酒瓶及瓶盖 flag = 1 brr =
喝酒问题:啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒
今天看到别人写的一个关于递归能够解决的喝酒问题,也是算是回顾一下之前学习递归逻辑的一些知识吧如题,啤酒2元一瓶 4个瓶盖能换1瓶啤酒,2个空瓶也能换1瓶啤酒,问:10元钱最多能喝几瓶酒?public class AlchoDemo { // 初始化 public static int COUNT = 0; private static void rec...
瞎玩 - 一瓶啤酒2块,两个瓶盖送一瓶,四个空瓶换一瓶。20元一共可以喝几瓶
问题: 一瓶啤酒2块,两个瓶盖送一瓶,四个空瓶换一瓶。20元一共可以喝几瓶? 思路: 啤酒,对我们有用的属性就是瓶盖和空瓶,10瓶啤酒可以考虑分别计算瓶盖和空瓶所得瓶数,再求和即可! 代码如下: #include #include #define MONEY 20 unsigned int compute_fun(unsigned int m,unsigned int n) {
【原创】10元买啤酒2个空瓶换一瓶4个瓶盖换一瓶经典算法
10元钱买5瓶啤酒,2个瓶盖换一瓶,4个空瓶换一瓶,10钱到底能买多少瓶啤酒?原创
智力题2元1瓶4个瓶盖换1瓶
智力题啤酒2元1瓶,4个瓶盖换1瓶,2个空瓶换1瓶,问10元钱可以喝几瓶?C语言
一道笔试题:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒?
题目:每瓶啤酒2元,3个空酒瓶或者5个瓶盖可换1瓶啤酒。100元最多可喝多少瓶啤酒?(不允许借啤酒)思路:利用递归算法,一次性买完,然后递归算出瓶盖和空瓶能换的啤酒数程序如下:#include <stdio.h> int GetNumber(int cap,int empty,int bottle) //cap瓶盖,empty空瓶,bottle啤酒瓶 {     if(empty &...
JAVA算法:啤酒2元一瓶,4个瓶盖可以换一瓶啤酒,2个空瓶可以换一瓶啤酒,输入多少钱可以喝多少瓶?
package com.stxy;import java.util.Scanner;/** * 啤酒2元一瓶,4个瓶盖可以换一瓶啤酒,2个空瓶可以换一瓶啤酒,输入多少钱可以喝多少瓶? *  *  * @author Administrator *  */public class Test1 {    // 定义一个变量,最终可以喝多少瓶    private static int totalNum...
.NET面试题:大致是,拿N元钱买啤酒,一瓶啤酒3元,2个空啤酒瓶可以换一瓶啤酒,问最后能喝多少瓶酒。(自己敲了一下,写的比较灵活,代码比较陋)
static void Main(string[] args)        {            int aa = 1;//开始            while (aa == 1)            {                Console.Write("总金额(元):");                int n = int.Parse(Console.ReadLine()...
C语言 递归实现 一元钱买一瓶啤酒,两个空瓶换一瓶啤酒.问n元钱能喝多少瓶啤酒?。
一块钱能买一瓶啤酒,两个空瓶能换一瓶啤酒,递归实现n块钱能买的啤酒数。 要求: (1) 用递归的方法计算能喝到的啤酒数目。 (2) 函数的原型为 int getNumberOfBeer(int n); (3) 不能定义全局变量。
java 10元钱买酒2元一瓶,2个瓶子或4个盖子可以兑1瓶酒,最后喝了多少瓶酒
仅供娱乐 10元钱买酒2元一瓶,2个瓶子或4个盖子可以兑1瓶酒,最后喝了多少瓶酒
10瓶啤酒 2个空瓶换1瓶 4个瓶盖换1瓶 能喝多少瓶?
如题 能喝多少瓶呢? 如图所示, 黄色高亮数字加起来就是最大瓶书 -> 37 解释: 黄色高亮为实际到手瓶数 绿色高亮为单瓶或者单盖子的数量 灰色部分为置换之后剩余单瓶子和单盖子的数量 黑色高亮部分 借一瓶表示像老板借一瓶啤酒,总共借了2次也就是向老板共借了2瓶啤酒,后面两个1表示最后用4个盖子和2个空瓶子置换了2瓶啤酒,全部还给老板,两清 所以结果就是 10 +
喝饮料问题
题目: 阿里巴巴的食堂搞活动促销,已知某饮料一瓶三元钱,4个瓶盖可以换一瓶,2个空瓶可以换一瓶,则30元可以喝几瓶?package ex栈; import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*;public class Main {/**
关于10元可以喝多少瓶啤酒问题
/* * 啤酒问题: * 啤酒2元一瓶,4个盖子可以换一瓶,两个空瓶可以换一瓶 * 问10元可以喝多少瓶? * 剩余多少空瓶和盖子。 * * 分析: * 10元先换5瓶啤酒, * 定义变量 total 保存总的瓶数 * 定义变量 temp 保存每次换到的瓶 * 定义变量 bottleCap 保...
啤酒2块1瓶, 4个盖换1瓶, 2个空瓶换1瓶, 10块可以喝几瓶?
public class Calculation { public static void main(String arg[]){ int beer=calculationBeerAmount(10,2,4,2); System.out.println("10元共喝了" + beer + "瓶啤酒."); } /** * ...
编程实践--现有10元,每瓶饮料2元;2个空瓶换一瓶饮料;4个瓶盖换一瓶饮料;总共能喝多少瓶?
编程解决实际问题,关于此问题若有更好的算法思路,欢迎提出,共同讨论! import lombok.Data; /** * @author yanzy * @date 2018/9/3 下午3:16 * @description 现有10元,每瓶饮料2元;2个空瓶换一瓶饮料;4个瓶盖换一瓶饮料;总共能喝多少瓶? */ @Data public class BottleCapExample...
一块钱能买一瓶啤酒,两个空瓶能换一瓶啤酒,递归实现n块钱能买的啤酒数。
一块钱能买一瓶啤酒,两个空瓶能换一瓶啤酒,递归实现n块钱能买的啤酒数。 要求: (1) 用递归的方法计算能喝到的啤酒数目。 (2) 函数的原型为 int getNumberOfBeer(int n); (3) 不能定义全局变量。
喝啤酒案例[java编写]
题目:一瓶啤酒2元钱,2个啤酒瓶可换一瓶啤酒,4个啤酒瓶盖可换一瓶,10元最多喝多少瓶啤酒? 版本1:使用while循环实现 package cn.lzu.demo; import java.util.Scanner; public class BeerDemo { /* * 一瓶啤酒2元钱,2个啤酒瓶可换一瓶啤酒, * 4个啤酒瓶盖可换一瓶,10元最多喝多少瓶啤酒?
10块钱可以喝多少瓶啤酒
10块钱可以喝多少瓶啤酒啤酒两块钱一瓶,四个盖子可以换一瓶,两个空瓶可以换一瓶。10块钱可以喝多少瓶啤酒?
最多能喝多少瓶啤酒呢?
啤酒2元一瓶,四个瓶盖可换一瓶啤酒,2个空瓶也可换一瓶啤酒,10元最多可以喝几瓶? #include "stdafx.h" const int BOTTLE_COUNT_TO_A_BEER = 2; const int GAP_COUNT_TO_A_BEER = 4; const int PRICE_OF_A_BEER = 2; void get_beer_count(int& beer_c
C#面试题:3个瓶盖换一瓶酒
一瓶酒3元,每3个瓶盖换一瓶酒,N元能喝多少瓶酒。 可以使用递归实现 int CountNum(int num){//num瓶盖数num=N/3;     if(num<3){         return num;     }else{         return (num-num%3)+CountNum(num/3+num%3);//调用递归方法     } } 大家有...
算法 啤酒 酒瓶 瓶盖 兑换问题
今天有人在java交流群里面有人问到一个算法问题:一个算法题:啤酒2块钱1瓶,4个瓶盖换1瓶2个空瓶换1瓶问:10块钱可以喝几瓶?首先,可以用10元买下5瓶啤酒,然后得到5个酒瓶和5个瓶盖,然后又可以用酒瓶和瓶盖兑换啤酒,得到的啤酒又可以有酒瓶和瓶盖,然后又能兑换啤酒。。。。如此反复。。但是多个瓶盖和酒瓶才能兑换一瓶啤酒,所以总有不能再兑换的时候。以下是我的代码:/** * 2018-04-13...
一道面试题,总共能喝多少瓶啤酒
题面啤酒2元一瓶,2个空瓶可以换一瓶,4个瓶盖可以换一瓶,现在给10元钱,总共能喝多少瓶啤酒?分析从题面可以看出是一个循环的过程,先买啤酒,喝完再拿瓶子或盖子换,最终当XX条件符合时将不再能循环进行下去,推演到算法里可以想到递归算法。标题以下仅以JS代码为例写下这个算法:var money = 10; var count = Maht.floor(money/2); //喝几瓶计数 var curP
2个饮料瓶可以换1瓶饮料,4个瓶盖可以换1瓶饮料,1瓶饮料1块钱,问10块钱最多能买喝几瓶饮料
2个饮料瓶可以换1瓶饮料,4个瓶盖可以换1瓶饮料,1瓶饮料1块钱,问10块钱最多能买喝几瓶饮料。 public static void main(String[] args) { int p = 10,q = 10; int i = 10,num = 10; while (i > 0){ i = 0; i = i + p
【编程】两元一瓶饮料,两个空瓶子换一瓶饮料,四个瓶盖换一瓶饮料。求:10元最多能喝到几瓶饮料?
利用编程解决问题题目: 两元一瓶饮料,两个空瓶子换一瓶饮料,四个瓶盖换一瓶饮料 求: 10元最多能喝到几瓶饮料? 答: //用来买饮料的钱 int money=10; //记录总共喝掉的瓶数 int p=0; //记录空瓶数 int kp =0; //记录瓶盖数 int g=0;for(int
一瓶汽水1块钱,3个瓶盖换一瓶汽水,2个空瓶换一瓶汽水,假如手里有5块钱,能喝多少瓶汽水
用三种方式实现以下命题: 一瓶汽水1块钱,3个瓶盖换一瓶汽水,2个空瓶换一瓶汽水,假如手里有5块钱,能喝多少瓶汽水 java /**已喝掉*/ static int sodaDrinked = 0; /**汽水*/ static int soda = 5; /**瓶盖*/ static int cap = 0; /**空瓶*/ static int emptyBottle = 0; pu...
C语言- 喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水?
喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水。编程实现。 整体思路:用递归的方式实现,每一次递归表示本次可以购买汽水的瓶数(M)。首先判断M是否是能够全部兑换完(M为偶数),分两种情况: 如果可以(M为偶数),再次进行 M/2 的递归,表示本次M个瓶子兑换 M/2 个汽水; 如果不可以(M为奇数),在这里我们进行一个判断(flag:看在本次兑换之前的兑换
两个瓶盖换一瓶可乐问题
问题描述无意间想起了这样一个问题: 一块钱可以买1瓶可乐,两个瓶盖子可以又可以换一瓶可乐,问,现在有十块钱,最多可以喝多少瓶可乐?背景相信这个问题应该有不少人问过,而且,面试编程的时候居然也有人问这种问题。刚认真思考了一下,得出答案如下:方法一分析:首先,10块钱一次性可以买10瓶,单拿出一瓶,而从剩下的9瓶中,每次拿出一个瓶盖和这个瓶盖就可以再换一瓶可乐,并且得到一个瓶盖,即,一共可以换得:1+
用空瓶和瓶盖换酒喝
前几天看到一个很有意思的智力题,题目大大致意思如下:啤酒每瓶2元,4个瓶盖或者2个空酒瓶可以换一瓶啤酒,当瓶盖或者空酒瓶不足以换取一瓶瓶酒时可以向商家借若干瓶盖或者空酒瓶,只要能够还得上,请问给你10元,最多可以喝多少瓶瓶酒?一眼看上去还真有点无从下手,于是我拿出纸盒笔在写下了下面买酒的过程:第1次:买5瓶;喝完后剩5空瓶+5盖; 第2次:换3瓶;剩1空瓶+1盖,喝完后剩4空瓶+4盖; 第3次:
试题:基本算法题之【n块钱最多可以喝多少瓶汽水】
题目描述 1块钱可以买一瓶汽水,2个汽水瓶可以换一瓶汽水,4个瓶盖可以换瓶汽水,请用编程实现有n块钱最多可以喝多少瓶汽水? //基于Javascript function f(n){ var sum=0; var n1=n;//n1钱数 var n2=0;//n2瓶盖 var n3=0;//n3瓶盖 if(n>0){ sum=n3=n2=n1; } while(n2>=2 |
编程思想题:现有10元钱,汽水2元一瓶,二个空瓶子换一瓶汽水,求最后能喝多少瓶
package com.smart; /**  * 现有10元钱,汽水2元一瓶,二个空瓶子换一瓶汽水,求最后能喝多少瓶  * @author Administrator  *  */ public class Think1 { static int exchang=2; static int total=0; public static void main(String[
k个瓶子可以换1瓶酒,要喝n瓶酒,最少需要买多少瓶酒?
k个瓶子可以换1瓶酒,要喝n瓶酒,最少需要买多少瓶酒?
空酒瓶换酒的问题
某小卖部出售一种啤酒,每瓶售价x元,同时可以用喝完的n个啤酒空瓶换一瓶啤酒,请编写一段程序,计算出m元钱最多可以喝到多少瓶啤酒 若共买了B瓶酒,每A个瓶子可以换1瓶酒,则最多能换到的瓶数是:B/(A-1) 能喝到的总瓶数为 C=B+B/(A-1)public class BottleTest { /** * * @param m 金额 * @param
ConsoleApplication.rar
啤酒2元一瓶,四个瓶盖可换一瓶啤酒,2个空瓶也可换一瓶啤酒,10元最多可以喝几瓶,要用C#实现. 代码来源:吴小朋个人博客 http://catsmallfish.com/blog/life/118.html
空瓶换酒问题
今天CSDN某群,里面有人发了一道挺有意思的题,这里贴一下。为了防止老年痴呆,拿起笔来练一下吧!:)思路理清了,就可以用代码实现一下:class Program { static void Main(string[] args) { //初始化钱数为10元 int money = 10; /
Java面试题:有20块钱,1块钱能买一瓶汽水,2个瓶子能换一瓶汽水,3个瓶盖能换一瓶汽水, 问一共能喝多少瓶汽水。
用java语言实现此算法 运用递归的思想实现,不用for,while等语句,输出一共能喝多少瓶水? public class BuySoda { public static void main(String[] args) { BuySoda buy = new BuySoda(); int num = buy.buywater(20, 0, 0); System.out....