Scala中如何基于比例条件计算面包的总成本?
解决Scala中面包优惠成本计算问题
核心逻辑分析
优惠规则是每2份汤可对应1份面包享受0.5元优惠,能享受优惠的面包数量由两个值共同决定:
- 汤的数量除以2取整数(即
汤数量 // 2,代表最多能获得的优惠名额数) - 实际购买的面包数量
取两者中的较小值,即为可享受优惠的面包份数,剩余面包按原价计算。
举两个典型场景验证:
- 2份汤、2份面包:优惠名额为1,总成本为
0.5 + 0.8 = 1.3(匹配示例结果) - 4份汤、3份面包:优惠名额为2,总成本为
2*0.5 + 0.8 = 1.8
完整代码实现
val prices: Map[String, Double] = Map( "Soup" -> 0.65, "Bread" -> 0.80, "Milk" -> 1.30, "Apples" -> 1.00 ) val itemCounts: Map[String, Int] = Map("Apples" -> 3, "Soup" -> 2, "Bread" -> 2) // 示例输入 val soupCount = itemCounts.getOrElse("Soup", 0) val breadCount = itemCounts.getOrElse("Bread", 0) // 计算可享受优惠的面包份数 val eligibleBreadForDiscount = Math.min(soupCount / 2, breadCount) // 计算面包总成本:优惠部分 + 原价部分 val breadTotalCost = eligibleBreadForDiscount * 0.5 + (breadCount - eligibleBreadForDiscount) * prices("Bread") println(breadTotalCost) // 示例输入下输出1.3
逻辑说明
soupCount / 2:用整数除法计算汤能兑换的优惠面包名额,比如3份汤仅能兑换1个名额Math.min(...):限制优惠份数不超过实际购买的面包数量,避免出现优惠名额多于面包数的不合理情况- 总成本拆分:优惠面包按0.5元计价,剩余面包按原价
prices("Bread")计价,两者相加即为面包的最终成本
该逻辑可覆盖所有汤与面包数量组合的场景,确保优惠计算准确。
内容的提问来源于stack exchange,提问作者pragmatic learner
相关产品推荐
相关产品推荐

