面试题__贩卖机只支持硬币支付,且收退......(买饮料)

/**
 * 贩卖机只支持硬币支付,且收退都只支持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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值