题目:
小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:
1.每道菜有折扣价和原价。折扣价不能超过原价。
2.订单有满x元减y元的优惠。当购买的菜的价格总和不小于x元时,总价格可以减y元。“减” 的价格不能超过“满”的价格。
3.满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
4.系统会自动为客户计算最低价格的方案。 在设计定价时,原价、折扣价和满减的价格都必须是正实数。如果设计的定价发生问题,则会提示数据错误。
请使用等价划分法设计测试用例,来测试该系统的功能。
输入描述: 第一行输入一个正整数n,代表菜的总数。
接下来的行,每行输入两个实数a和b,代表每道菜的原价是a,折扣价是b,
最后一行输入两个实数x和y,代表满x元可以减y元。
思路:
直接模拟,但是要注意错误值的判断:
1. a,b,x,y都要大于0
2. a ≥ b, x ≥ y
此外还要注意,输出是只保留小数点后两位
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
double a, b, x ,y,origin = 0, count = 0;;
double minPrice = INT_MAX;
cin >> n;
for(int i = 0; i < n; i++){
cin >> a >> b;
if(a <= 0 || b <= 0 || a < b){
cout<< "error";
return 0;
}
origin += a;
count += b;
}
cin >> x >> y;
if(x <= 0 || y <= 0 || x < y){
cout << "error"; return 0;
}
minPrice = min(origin >= x ? origin - y: origin, count);
cout << fixed << setprecision(2) << minPrice;
return 0;
}
测试用例设计:
有效等价类 | 无效等价类 | |
折扣价和原价 | 折扣价小于等于原价且都为正整数 | 折扣价小于等于0 |
原价小于等于0 | ||
折扣价大于原价 | ||
满减价 | 满减价大于优惠且都为正整数 | 满减价小于等于0 |
优惠小于等于0 | ||
优惠大于满减价 |
用例编号 | 原价a | 折扣价b | 满减价x | 优惠y | 预计输出 |
1 | 10 | 8 | 8 | 3 | 7 |
2 | 15 | 10 | 10 | 3 | 10 |
3 | -10 | 10 | 10 | 3 | error |
4 | 10 | -1 | 10 | 3 | error |
5 | 10 | 8 | -5 | 3 | error |
6 | 10 | 8 | 5 | -1 | error |
7 | 10 | 11 | 5 | 1 | error |
8 | 10 | 7 | 8 | 9 | error |