题目描述
小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:- 每道菜有折扣价和原价。折扣价不能超过原价。
- 订单有满x元减y元的优惠。当购买的菜的价格总和不小于x元时,总价格可以减y元。“减”的价格不能超过“满”的价格。
- 满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
- 系统会自动为客户计算最低价格的方案。
输入描述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)),"除");
*/
}