当前位置:   article > 正文

美团2023面试题:小美的外卖订单_小美正在设计美团外卖的定价信息。已知外卖定价的规则如下: 1. 每道菜有折扣价和

小美正在设计美团外卖的定价信息。已知外卖定价的规则如下: 1. 每道菜有折扣价和
题目描述
小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:
  1. 每道菜有折扣价和原价。折扣价不能超过原价。
  2. 订单有满x元减y元的优惠。当购买的菜的价格总和不小于x元时,总价格可以减y元。“减”的价格不能超过“满”的价格。
  3. 满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
  4. 系统会自动为客户计算最低价格的方案。
在设计定价时,原价、折扣价和满减的价格都必须是正实数。如果设计的定价发生问题,则会提示数据错误。 请使用等价划分法设计测试用例,来测试该系统的功能。
输入描述1

第一行输入一个正整数n代表菜的总数。
接下来的n行,每行输入两个实数a和b,代表每道菜的原价是a,折扣价是b。
最后一行输入两个实数x和y,代表满x元可以减y元。

数据中所有实数的绝对值不超过1000。

输出描述2
如果数据有误,则输出一行字符串"error"。 否则输出一个小数,小数点后保留2位即可。该小数代表顾客购买了全部菜各一份时,订单的总价格。
示例1
输入例子:
2
10 5.5
10 6.5
15 3
输出例子:12.00
例子说明:虽然触发了满15元减3元,但使用折扣只需要花12元,低于使用满减的价格(20-3=17),因此最终系统会为客户推荐折扣价。
示例2
输入例子:
2
10 5.5
10 6.5
20 10
输出例子: 10.00
例子说明: 触发满20元减10元即可。满减价优于折扣价。
示例3
输入例子:
2
10 10.25
10 3.5
20 4.5
输出例子:error
例子说明:折扣价高于原价,数据错误。
AC代码:
public class main {
    public static void main(String[] args) {
        DecimalFormat decimalFormat = new DecimalFormat();
        //DecimalFormat类用于格式化BigDecimal的,这里保留两位小数
        decimalFormat.applyPattern("0.00");

        //商品原价总价
        BigDecimal originPrice = new BigDecimal(0);
        //商品原价原计划折后总价
        BigDecimal savePrice = new BigDecimal(0);
        //满减门槛价格
        BigDecimal top = new BigDecimal(0);
        //将满减价格
        BigDecimal save = new BigDecimal(0);

        boolean flag = true;

        Scanner in = new Scanner(System.in);
        Float num = in.nextFloat();
        while (num>=0 && in.hasNextFloat()) {
            BigDecimal a = new BigDecimal(in.nextFloat());
            BigDecimal b = new BigDecimal(in.nextFloat());
            /**
             * 输出false情况有三种
             * 1、某一项菜品原计划折后总价=0
             * 2、某一项菜品原计划折后总价>它的原价
             * 3、某一项菜品源计划折后总价=它的原价
             */
            if(b.compareTo(new BigDecimal(0))==-1 || b.compareTo(a)==1 || b.compareTo(new BigDecimal(0))==0){
                flag = false;
            }
            //记录最后一行输入(满减门槛价格、将满减价格)
            if(num == 0){
                top = a;
                save = b;
            }else{
                //如果不是最后一行则累加数据
                originPrice = originPrice.add(a);
                savePrice = savePrice.add(b);
            }
            num--;
        }
        /* 如果输入信息合法就计算哪一种满减合适
            1、判断原价是否达到满减门槛(原价总价=门槛价 || 原价总价大于门槛价)
            1.2、三目运算判断原价折后总价和满减折后总价哪个划算
           如果输入信息不合法
            :输出error
         */
        if(flag){
            if(originPrice.compareTo(top)==1 || originPrice.compareTo(top)==0){
                BigDecimal bigDecimal = savePrice.compareTo(originPrice.subtract(save))==1 ? (originPrice.subtract(save)) : savePrice;
                System.out.println(decimalFormat.format(bigDecimal));

            }else{
                System.out.println(decimalFormat.format(savePrice));
            }
        }else{
            System.out.println("error");
        }
    }
    /**
     * 简单快速拓展一下DecimalFormat的使用:
     * BigDecimal a = new BigDecimal(10.0);
     * BigDecimal b = new BigDecimal(2.53);
     * log.info(String.valueOf(a.add(b)),"加");
     * log.info(String.valueOf(a.subtract(b)),"减");
     * log.info(String.valueOf(a.multiply(b)),"乘");
     * log.info(String.valueOf(a.divide(b,4, RoundingMode.HALF_UP)),"除");
     */
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/480725
推荐阅读
相关标签
  

闽ICP备14008679号