华为OD机试 网上商城优惠活动

本期题目:网上商城优惠活动

题目

  • 背景 某网上商城举办优惠活动,发布了满减、打折、无门槛 3 种优惠券,分别为:

    1. 每满100元优惠10元,无使用数限制,如100~199元可以使用1张减10元,200~299可使用2张减20元,以此类推;
    2. 92折券,1次限使用1张,如100元,则优惠后为92元;
    3. 无门槛5元优惠券,无使用数限制,直接减5元。
  • 优惠券使用限制 每次最多使用2种优惠券,2种优惠可以叠加(优惠叠加时以优惠后的价格计算), 以购物200元为例,可以先用92折券优惠到184元,再用1张满减券优惠10元,最终价格是174元, 也可以用满减券2张优惠20元180元,再使用92折券优惠到165(165.6 向下取整)元, 不同使用顺序的优惠价格不同,以最优惠价格为准。 在一次购物中,同一类型优惠券使用多张时必须一次性使用, 不能分多次拆开穿插使用(不允许先使用 1 张满减券,再用打折券,再使用一张满减券)。

  • 问题 请设计实现一种解决方法,帮助购物者以最少的优惠券获得最优的优惠价格。 优惠后价格越低越好,同等优惠价格,使用的优惠券越少越好,可以允许某次购物不使用优惠券。

  • 约定 优惠活动每人只能参加一次,每个人的优惠券种类和数量是一样的。

输入

第一行:每个人拥有的优惠券数量(数量取值范围为[0, 10]),按满减、打折、无门槛的顺序输入。 第二行:表示购物的人数n(1 <= n <= 10000)

最后 n 行:每一行表示某个人优惠前的购物总价格(价格取值范围(0, 1000],都为整数)。

约定:输入都是符合题目设定的要求的。

输出

每行输出每个人每次购物优惠后的最低价格以及使用的优惠券总数量,每行的输出顺序和输入的顺序保持一致。

备注

  1. 优惠券数量都为整数,取值范围为[0, 10]
  2. 购物人数为整数,取值范围为[1, 10000]
  3. 优惠券的购物总价为整数,取值范围为(0, 1000]
  4. 优惠后价格如果是小数,则向下取整,输出都为整数。

题解地址 📤

华为 OD 机试

今年大环境不好,投递简历没得到回复,只有华为 OD 和几个外包公司联系上。机试分三道编程题,满分 400 分,150 分及格,分数越高推荐的部门越多。性格测试 50 道选择题,前后答案需一致,尽量往积极阳光方向靠拢。技术一面问八股文和基础 SQL 优化、索引等,手撕编程题。技术二面问项目经验和实现细节,手撕中等难度编程题。主管面和 HR 资面询问工作时间和离职原因,谈薪资。整个面试过程持续约 2 周,最终通过。虽然机试分数不到 300 分,但面试官在技术二面给笔者更多机会,使面试时间超过了 90 分钟。虽然 OD 待遇不比其他公司高多少,但筛选出优秀人才的目的促使笔者参加面试。

posted @ 2023-04-17 15:17  梦想橡皮擦  阅读(78)  评论(0编辑  收藏  举报