面试题__贩卖机只支持硬币支付,且收退......(买饮料)
程序员文章站
2022-03-03 22:38:32
...
/**
* 贩卖机只支持硬币支付,且收退都只支持10 ,50,100三种面额。一次购买只能出一瓶可乐,且投钱和找零都遵循优先使用大钱的原则,
* 需要购买的可乐数量是m, 其中手头拥有的10、50、100的数量分别为a、b、c,可乐的价格是x(x是10的倍数) 。
* 请计算出需要投入硬币次数?
*
* @author hqh
* @create 2021/6/21 11:43
* @description
* @mail
*/
public class BuyWater {
static int m, x, a, b, c;
static int money, ca, cb, cc, result;
public static void main(String[] args) {
inData();
if (100 * a + 50 * b + 10 * c < m * x) {
System.out.println("穷逼,滚");
} else {
//需投入金额不是100倍数则投入数量+1
ca = money % 100 > 0 ? money / 100 + 1 : money / 100;
//需投入数量<=持有100面额数量,则全投入100,并计算找零
if (ca <= a) {
result = money % 100 > 0 ? 100 - money % 100 : 0;
print(ca, 0, 0, result);
} else {
//100面额不足,全部投入100面额在计算50面额
money -= 100 * a;
cb = money % 50 > 0 ? money / 50 + 1 : money / 50;
if (cb <= b) {
result = money % 50 > 0 ? 50 - money % 50 : 0;
print(a, b, cc, result);
} else {
//50面额不足,投入10面额,可乐是10的倍数,无需找零
cc = (money - 50 * b) / 10;
print(a, b, cc, 0);
}
}
}
}
//用于输入价格,数量,自身硬币数量
static void inData() {
Scanner sc = new Scanner(System.in);
System.out.println("price?");
m = sc.nextInt();
System.out.println("num?");
x = sc.nextInt();
System.out.println("a");
a = sc.nextInt();
System.out.println("b");
b = sc.nextInt();
System.out.println("c");
c = sc.nextInt();
money = m * x;
}
//用于打印投入数量和找零数量
static void print(int a, int b, int c, int result) {
System.out.println("a=" + a + ";b=" + b + ";c=" + c);
if (result == 0) {
System.out.println("找零 50 数量:" + 0 + "找零 10 数量" + 0);
} else if (result >= 50) {
System.out.println("找零 50 数量:" + 1 + "找零 10 数量" + (result - 50) / 10);
} else {
System.out.println("找零 50 数量:" + 0 + "找零 10 数量" + (result) / 10);
}
}
}