首页 > 试题广场 >

喝酒

[编程题]喝酒
  • 热度指数:1162 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
一瓶酒m元钱,两个酒瓶可以换一瓶酒,四个瓶盖可以换一瓶酒,现在有 n 元钱,求最多可以喝多少瓶酒?
(注:没有借贷功能,即最终不允许借一瓶酒、喝完后拿酒瓶兑换归还的操作)
示例1

输入

2,12

输出

19

说明

酒鬼总计可以喝19瓶酒  

备注:
0 < m < 100
0 < n < 2000
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回牛牛能喝的最多的酒
     * @param m int整型 酒单价
     * @param n int整型 牛牛的现金
     * @return int整型
     */
    public int countWine (int m, int n) {
        // write code here
        return (n/m)*4-5;
    }
}

最简单的方法 ac
发表于 2021-02-27 10:52:00 回复(0)
def countWine(self , m , n ):
        init=n//m
        i=0
        cap=init+i
        bot=init+i
        cnt=[]
        while cap>=2 or bot>=4:
            t1=cap//2
            t2=bot//4
            i=i+t1+t2
            cap=cap%2
            bot=bot%4
            cap+=t1+t2
            bot+=t1+t2
            cnt.append(init+i)
        return cnt[-1]
发表于 2021-09-03 14:39:31 回复(0)
class Solution {
public:
    int countWine(int m, int n) {
        int ans = 0;
        int jiupin = 0;
        int pingai = 0;
        while(n >= m || ***t;= 2 || pingai >= 4)
        {
            if(n >= m)
            {
                ans += n / m;
                jiupin += n / m;
                pingai += n / m;
                n = n % m;
            }
            if(***t;= 2)
            {
                int mid = jiupin / 2;
                ans += mid;
                pingai += mid;
                jiupin = jiupin % 2;
                jiupin += mid;                
            }
            if(pingai >= 4)
            {
                int mid1 = pingai / 4;
                ans += mid1;
                jiupin += mid1;
                pingai = pingai % 4;
                pingai += mid1;
            }
        }
        return ans;
    }
};
发表于 2021-08-09 18:53:19 回复(0)
class Solution:
    def countWine(self , m , n ):
        # write code here
        return (n // m) * 4 - 5

发表于 2021-06-15 19:44:52 回复(0)
初始 - 12/2= 6酒
第一次换本钱是6酒= 6瓶+6盖 可换4酒余2盖
第二次换本钱是4瓶+6盖 可换3酒余2盖
第三次换本钱是3瓶+5盖 可换2酒余1瓶1盖
第四次换本钱是3瓶+3盖 可换1酒余1瓶3盖
第五次换本钱是2瓶+4盖 可换2酒
第六次换本钱是2瓶+2盖 可换1酒余2盖
第7次换本钱是1瓶余3盖,换不了了
把所有的酒都加上6+4+3+2+1+2+1=19,重点就是要把换来的酒换成瓶和盖和上一次换余上的累计起来继续换,换到不能换为止

发表于 2021-05-10 11:19:06 回复(1)
    int countWine(int m, int n) {
        // write code here
        //分别表示瓶盖数、酒瓶数、酒数
        int a=0,b=0,c=0;
        a=b=c=n/m;
        int result=c;
        int flag=false;
        while(true){
            if(a/4>=1){
                c=a/4;
                result+=c;
                a=a%4+c;
                b+=c;
                flag=true;
            }
            if(b/2>=1){
                c=b/2;
                result+=c;
                b=b%2+c;
                a+=c;
                flag=true;
            }
            if(!flag)break;
            flag=false;
        }
        return result;
    }

发表于 2021-04-14 11:19:51 回复(0)
python 
class Solution:
    def countWine(self , m , n ):
        he=n//m#第一次购买喝了多少瓶
        ping=he
        gai=he
        while True:
            if ping>=2:
                new_he1=ping//2
            else:
                new_he1=0
            if gai>=4:
                new_he2=gai//4
            else:
                new_he2=0
            ping=ping-(ping//2)*2+new_he1+new_he2
            gai=gai-(gai//4)*4+new_he1+new_he2
            he=he+new_he1+new_he2
            if ping<2 and gai<4:
                return he

发表于 2021-04-05 13:37:20 回复(0)
return 4*(n/m)-5;
发表于 2021-03-06 00:35:46 回复(2)
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回牛牛能喝的最多的酒
     * @param m int整型 酒单价
     * @param n int整型 牛牛的现金
     * @return int整型
     */
    int countWine(int m, int n) {
        // write code here
        int res = n / m;
        int a = res, b = res;
        while(a >= 2 || b >= 4){
            int temp;
            if(a >= 2){
                res += a / 2;
                b += a /2;
                temp = a % 2;
                a = a / 2 + temp;
            }
            if(b >= 4){
                res += b / 4;
                a += b / 4;
                temp = b % 4;
                b = b / 4 + temp;
            }
        }
        return res;
    }
};

发表于 2021-03-05 20:46:56 回复(0)
    public static int countWine (int m, int n) {
        // write code here
        //原始能买的瓶数
        int count = n/m;
        //使用递归返回瓶数
        return getCount(count,count, count);
    }

    /**
     *
     * @param count1 瓶数量
     * @param count2 瓶盖数量
     * @return
     */
    public static int getCount(int count1, int count2, int sum){
        //设还能换的酒数为0
        int num = 0;
        if(count1<=1 && count2 <= 3) {
            return sum;
        }
        num += count1/2;
        num += count2/4;
        sum = sum +num;
        //还剩的空瓶和瓶盖的数量
        count1 = count1%2 + num;
        count2 = count2%4 + num;
        return getCount(count1, count2, sum);
    }

发表于 2021-02-25 13:57:04 回复(0)
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回牛牛能喝的最多的酒
     * @param m int整型 酒单价
     * @param n int整型 牛牛的现金
     * @return int整型
     */
    public int countWine (int m, int n) {
        // write code here
        int sum = n/m; // 酒的数量
        int p = sum;   // 瓶的数量
        int pg = sum;  // 瓶盖的数量
        while(p>=2 || pg>=4){
            int i = p/2 + pg/4;
            sum += i;
            p = p%2 + i;
            pg = pg%4 + i;
        }
        return sum;
    }
}

发表于 2021-02-03 11:35:51 回复(0)

问题信息

难度:
11条回答 2306浏览

热门推荐

通过挑战的用户

查看代码