前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【LeetCode第20周夜猫赛】5324. 每隔 n 个顾客打折

【LeetCode第20周夜猫赛】5324. 每隔 n 个顾客打折

作者头像
韩旭051
发布2020-06-23 11:41:32
3180
发布2020-06-23 11:41:32
举报
文章被收录于专栏:刷题笔记刷题笔记

超市里正在举行打折活动,每隔 n 个顾客会得到 discount 的折扣。

超市里有一些商品,第 i 种商品为 products[i] 且每件单品的价格为 prices[i] 。

结账系统会统计顾客的数目,每隔 n 个顾客结账时,该顾客的账单都会打折,折扣为 discount (也就是如果原本账单为 x ,那么实际金额会变成 x - (discount * x) / 100 ),然后系统会重新开始计数。

顾客会购买一些商品, product[i] 是顾客购买的第 i 种商品, amount[i] 是对应的购买该种商品的数目。

请你实现 Cashier 类:

Cashier(int n, int discount, int[] products, int[] prices) 初始化实例对象,参数分别为打折频率 n ,折扣大小 discount ,超市里的商品列表 products 和它们的价格 prices 。 double getBill(int[] product, int[] amount) 返回账单的实际金额(如果有打折,请返回打折后的结果)。返回结果与标准答案误差在 10^-5 以内都视为正确结果。

示例 1:

输入 ["Cashier","getBill","getBill","getBill","getBill","getBill","getBill","getBill"] [[3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]],[[1,2],[1,2]],[[3,7],[10,10]],[[1,2,3,4,5,6,7],[1,1,1,1,1,1,1]],[[4],[10]],[[7,3],[10,10]],[[7,5,3,1,6,4,2],[10,10,10,9,9,9,7]],[[2,3,5],[5,3,2]]] 输出 [null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0] 解释 Cashier cashier = new Cashier(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]); cashier.getBill([1,2],[1,2]); // 返回 500.0, 账单金额为 = 1 * 100 + 2 * 200 = 500. cashier.getBill([3,7],[10,10]); // 返回 4000.0 cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]); // 返回 800.0 ,账单原本为 1600.0 ,但由于该顾客是第三位顾客,他将得到 50% 的折扣,所以实际金额为 1600 - 1600 * (50 / 100) = 800 。 cashier.getBill([4],[10]); // 返回 4000.0 cashier.getBill([7,3],[10,10]); // 返回 4000.0 cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // 返回 7350.0 ,账单原本为 14700.0 ,但由于系统计数再次达到三,该顾客将得到 50% 的折扣,实际金额为 7350.0 。 cashier.getBill([2,3,5],[5,3,2]); // 返回 2500.0

提示:

1 <= n <= 10^4 0 <= discount <= 100 1 <= products.length <= 200 1 <= products[i] <= 200 products 列表中 不会 有重复的元素。 prices.length == products.length 1 <= prices[i] <= 1000 1 <= product.length <= products.length product[i] 在 products 出现过。 amount.length == product.length 1 <= amount[i] <= 1000 最多有 1000 次对 getBill 函数的调用。 返回结果与标准答案误差在 10^-5 以内都视为正确结果。

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/apply-discount-every-n-orders 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

没写上来,学习大佬的思路

感觉我的思路也没太大问题,就是细节可能不行吧。。。(我到现在都没意识到自己的错误)

代码语言:javascript
复制
class Cashier {
public:
    int N,dis;
    vector<int> price;
    unordered_map<int,int> pro;
    int cnt=0;
    Cashier(int n, int discount, vector<int>& products, vector<int>& prices) {
        N=n;
        dis=discount;
        for(int i=0;i<products.size();i++)pro[products[i]]=i;
        price=prices;
    }
    
    double getBill(vector<int> product, vector<int> amount) {
        cnt++;
        double ans=0;
        for(int i=0;i<product.size();i++)
        {
            ans+=price[pro[product[i]]]*amount[i];
        }
        if(cnt&&!(cnt%N))ans*=(100-dis)/100.0;
        return ans;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 没写上来,学习大佬的思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档