小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:
1. 每道菜有折扣价和原价。折扣价不能超过原价。
2. 订单有满元减元的优惠。当购买的菜的价格总和不小于元时,总价格可以减元。“减”的价格不能超过“满”的价格。
3. 满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
4. 系统会自动为客户计算最低价格的方案。
请使用等价划分法设计测试用例,来测试该系统的功能。
第一行输入一个正整数,代表菜的总数。
接下来的行,每行输入两个实数和,代表每道菜的原价是,折扣价是。
最后一行输入两个实数和,代表满元可以减元。
数据中所有实数的绝对值不超过1000。
如果数据有误,则输出一行字符串"error"。
否则输出一个小数,小数点后保留2位即可。该小数代表顾客购买了全部菜各一份时,订单的总价格。
2 10 5.5 10 6.5 15 3
12.00
虽然触发了满15元减3元,但使用折扣只需要花12元,低于使用满减的价格(20-3=17),因此最终系统会为客户推荐折扣价。
2 10 5.5 10 6.5 20 10
10.00
触发满20元减10元即可。满减价优于折扣价。
2 10 10.25 10 3.5 20 4.5
error
折扣价高于原价,数据错误。
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { // 原价,折扣价 double yuan = 0, zekou = 0; Scanner in = new Scanner(System.in); int num = in.nextInt(); int size = num; double [][]arr = new double[num][2]; while (num * 2 > 0) { double a = in.nextDouble(); double b = in.nextDouble(); // 输入错误处理 if (b > a || b <= 0) { System.out.println("error"); return; } arr[num - 1][0] = a; arr[num - 1][1] = b; num--; } // 计算原价和折扣价 for (int i = 0; i < size; i++) { yuan = yuan + arr[i][0]; zekou = zekou + arr[i][1]; } // 满多少 double man = in.nextDouble(); // 减多少 double jian = in.nextDouble(); // 判断输入是否正确 if (man < 0 || jian <= 0 || jian > man) { System.out.println("error"); return; } if (yuan > man) { yuan = yuan - jian; } System.out.printf("%.2f", yuan > zekou ? zekou : yuan); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { double x = 0; // 原价总数 double y = 0; // 折扣总数 Scanner in = new Scanner(System.in); int menuCount = in.nextInt(); while (menuCount-- >= 1) { double a = in.nextDouble(); // 原价 double b = in.nextDouble(); // 折扣 if (a < b || a <= 0 || b <= 0) { System.out.println("error"); return; } x += a; y += b; } double o = in.nextDouble(); // 满多少 double d = in.nextDouble(); // 减多少 if (o < d || o <= 0 || d <= 0) { System.out.println("error"); return; } double t = 0; t = x >= o ? x - d : x; if (t < y) { System.out.printf("%.2f", t); } else { System.out.printf("%.2f", y); } } }