首页 > 试题广场 >

小美的外卖订单

[编程题]小美的外卖订单
  • 热度指数:5445 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小美正在设计美团外卖的定价信息。已知外卖定价的规则如下:
1. 每道菜有折扣价和原价。折扣价不能超过原价。
2. 订单有满x元减y元的优惠。当购买的菜的价格总和不小于x元时,总价格可以减y元。“减”的价格不能超过“满”的价格。
3. 满减优惠和折扣价是互斥的,当且仅当每个菜都选择了原价才可以触发满减。
4. 系统会自动为客户计算最低价格的方案。

在设计定价时,原价、折扣价和满减的价格都必须是正实数。如果设计的定价发生问题,则会提示数据错误。
请使用等价划分法设计测试用例,来测试该系统的功能。

输入描述:
第一行输入一个正整数n,代表菜的总数。
接下来的n行,每行输入两个实数a_ib_i,代表每道菜的原价是a_i,折扣价是b_i
最后一行输入两个实数xy,代表满x元可以减y元。

1\leq n \leq 10^5
数据中所有实数的绝对值不超过1000。


输出描述:
如果数据有误,则输出一行字符串"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

说明

折扣价高于原价,数据错误。
void async function () {
    // Write your code here
    const n = await readline()
    let arr = []
    for (let i = 0; i < n; i++) {
        let [a, b] = (await readline()).split(' ').map(Number)
        if (a < b || b <= 0) {
            console.log("error")
            return
        }
        arr.push([a, b])
    }
    const[x, y] = (await readline()).split(' ').map(Number)
    if (x < 0 || y <= 0 || x < y) {
        console.log("error")
        return
    }
    let m = 0, old = 0
    for (let i = 0; i < n; i++) {
        m += arr[i][1]
        old += arr[i][0]
    }
    old -= old > x ? y : 0
    console.log(Math.min(m, old).toFixed(2))
}()

发表于 2023-11-12 15:02:27 回复(0)