小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:
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);
}
}
}