一瓶酒m元钱,两个酒瓶可以换一瓶酒,四个瓶盖可以换一瓶酒,现在有 n 元钱,求最多可以喝多少瓶酒?
(注:没有借贷功能,即最终不允许借一瓶酒、喝完后拿酒瓶兑换归还的操作)
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;
}
} 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;
} 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;
}
}; 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);
} 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;
}
}