首页 > 其他分享 >1357. Apply Discount Every n Orders 每隔n个顾客打折

1357. Apply Discount Every n Orders 每隔n个顾客打折

时间:2023-10-29 09:04:55浏览次数:33  
标签:10 product getBill discount 1357 Discount Every products 100


There is a supermarket that is frequented by many customers. The products sold at the supermarket are represented as two parallel integer arrays products and prices, where the ith product has an ID of products[i] and a price of prices[i].

When a customer is paying, their bill is represented as two parallel integer arrays product and amount, where the jth product they purchased has an ID of product[j], and amount[j] is how much of the product they bought. Their subtotal is calculated as the sum of each amount[j] * (price of the jth product).

The supermarket decided to have a sale. Every nth customer paying for their groceries will be given a percentage discount. The discount amount is given by discount, where they will be given discount percent off their subtotal. More formally, if their subtotal is bill, then they would actually pay bill * ((100 - discount) / 100).

Implement the Cashier class:

  • Cashier(int n, int discount, int[] products, int[] prices) Initializes the object with n, the discount, and the products and their prices.
  • double getBill(int[] product, int[] amount) Returns the final total of the bill with the discount applied (if any). Answers within 10-5 of the actual value will be accepted.

Example 1:

Input
["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]]]
Output
[null,500.0,4000.0,800.0,4000.0,4000.0,7350.0,2500.0]
Explanation
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]); // return 500.0. 1st customer, no discount.
// bill = 1 * 100 + 2 * 200 = 500.
cashier.getBill([3,7],[10,10]); // return 4000.0. 2nd customer, no discount.
// bill = 10 * 300 + 10 * 100 = 4000.
cashier.getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]); // return 800.0. 3rd customer, 50% discount.
// Original bill = 1600
// Actual bill = 1600 * ((100 - 50) / 100) = 800.
cashier.getBill([4],[10]); // return 4000.0. 4th customer, no discount.
cashier.getBill([7,3],[10,10]); // return 4000.0. 5th customer, no discount.
cashier.getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]); // return 7350.0. 6th customer, 50% discount.
// Original bill = 14700, but with
// Actual bill = 14700 * ((100 - 50) / 100) = 7350.
cashier.getBill([2,3,5],[5,3,2]); // return 2500.0. 7th customer, no discount.

Constraints:

  • 1 <= n <= 104
  • 0 <= discount <= 100
  • 1 <= products.length <= 200
  • prices.length == products.length
  • 1 <= products[i] <= 200
  • 1 <= prices[i] <= 1000
  • The elements in products are unique.
  • 1 <= product.length <= products.length
  • amount.length == product.length
  • product[j] exists in products.
  • 1 <= amount[j] <= 1000
  • The elements of product are unique.
  • At most 1000 calls will be made to getBill.
  • Answers within 10-5 of the actual value will be accepted.

这道题让给每n个订单打折,给了个折扣数,以及产品和价格数组,表示 products[i] 产品的价格为 prices[i],现在给了一个产品组 product 和数量数组 amount,表示购买 product[i] 产品的数量为 ampunt[i] 个,让求给定的订单的价格。这道题没有太大的难度,先用一个 HashMap 来简历产品和其价格之间的映射,然后用个全局变量 cnt 来统计已接受订单的个数。在 getBill 函数中,先计算出买所有订单内的产品的总价,然后判断当前的订单个数 cnt 是否能整除n,能的话再计算出打折后的价格即可,参见代码如下:


class Cashier {
public:
    Cashier(int n, int discount, vector<int>& products, vector<int>& prices) {
        this->n = n;
        this->discount = discount;
        this->cnt = 0;
        for (int i = 0; i < products.size(); ++i) {
            m[products[i]] = prices[i];
        }
    }
    
    double getBill(vector<int> product, vector<int> amount) {
        double res = 0;
        for (int i = 0; i < product.size(); ++i) {
            res += m[product[i]] * amount[i];
        }
        if (++cnt % n == 0) {
            res = (res * (100 - discount)) / 100;
        }
        return res;
    }

private:
    int n, discount, cnt;
    unordered_map<int, int> m;
};

Github 同步地址:

https://github.com/grandyang/leetcode/issues/1357


类似题目:

Apply Discount to Prices


参考资料:

https://leetcode.com/problems/apply-discount-every-n-orders

https://leetcode.com/problems/apply-discount-every-n-orders/solutions/516990/java-python-3-hashmap-dictionary/


LeetCode All in One 题目讲解汇总(持续更新中...)

标签:10,product,getBill,discount,1357,Discount,Every,products,100
From: https://www.cnblogs.com/grandyang/p/17795408.html

相关文章

  • 无涯教程-Clojure - every-pred函数
    接受一组断言,并返回一个函数"f",如果所有组成断言针对所有参数返回逻辑真值,则返回true,否则返回false。every-pred-语法(every-predp1p2..pn)参数  -  'p1p2...pn'是需要测试的所有断言的列表。every-pred-示例(nsclojure.examples.example(:gen-clas......
  • 实战攻防演练-利用Everything搜索软件进行内网后渗透利用
    前言Everything是一款很出名的文件搜索工具,基于文件、文件夹名称的快速搜索的轻量级的软件,而早在几年前就有很多apt组织利用everything来进行文件查找等,前几年在T00ls上也有人发过相关的文章,渗透测试技巧|Everything的利用,事实上在实战中用到的地方还是很多,而且他还是个白进程,支......
  • 前端every()函数
    前端中的every函数是用于验证数组中的每个元素是否都满足某个条件。它接受一个回调函数作为参数,该回调函数会依次遍历数组中的每个元素,并返回一个布尔值来表示该元素是否满足条件。如果数组中的所有元素都满足条件,every函数将返回true;否则,返回false。下面是一个示例代码,展示了如何......
  • 254_搜索利器Everything的“不务正业”之旅
    这是一篇原发布于2020-01-2615:27:00得益小站的文章,备份在此处。前言Windows平台上秒级搜索软件Everything,相信有非常的多的朋友都使用过,它能够基于文件名快速定文件和文件夹位置,非常适合像轶哥这种把文件随处乱丢的用户。但Everything还有另外几个非常好用的功能:批量重命名......
  • Learn Everyday English for Speaking
    专有名词salmon:三文鱼chocolatefountain:巧克力喷泉drumandbass:鼓和贝斯Spaghetti:意大利面adrenaline:肾上腺素首句EnglishYou'retellingme?还用你说。这是一个表示“你不用告诉我,我已经知道了”的表达方式,相当于中文中的“你还用说?”或“你在告诉我?”。Definitely:......
  • 记录--JavaScript 令人惊讶的一点:对于空数组every()方法返回true
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助JavaScript语言的内核足够大,导致我们很容易误解它的某些部分是如何工作的。我最近重构了一些使用every()方法的代码,并且发现我并不真正理解every()的逻辑。在我看来,我认为回调函数必须被调用并返回true的时候ev......
  • Deltix Round, Autumn 2021 (open for everyone, rated, Div. 1 + Div. 2) A. Divide
    有一个长为\(n\)的数组,可以执行以下整份操作任意次:选择任意两个数\(a_i,a_j\),满足\(2\mida_i\)\(a_i=\frac{a_i}{2}\)\(a_j=2\cdota_j\)请找到经过任意此操作后的最大\(\sum_{i=1}^{n}a_i\)。在唯一分解定理下讨论两个数\(a_i=2^{\alpha_i}\cdotx,a......
  • win everything toolbar设置
    everythingtoolbar设置安装好toolbar后需要设置后才能在工具栏显示,且有一些个性化设置。工具栏显示toolbar工具栏->右键->工具栏->everythingtoolbar隐藏无效搜索设置详细显示......
  • Codeforces Round 811 (Div. 3) A. Everyone Loves to Sleep
    闹钟设有\(n\)个时间点,第\(i\)个时间为\((H_i,M_i)\)。在\(h,m\)时刻入睡,响铃必须起床,问能睡多久。使用\(set<pair<int,int>>\)存储闹铃时刻,然后在其中\(lower_{bound}\)到\(<first\geqh,second\geqm>\)的迭代器\(it\)。若\(it=end\),则\(it=begin......
  • Every derived table must have its own alias(sql语句错误解决方法)
    1、执行下面语句时,报错Everyderivedtablemusthaveitsownaliasselect*from(select*fromjt_noteswherecreateUser='b548323007b647809bb8e4192cf44195'limit0,10)2、解决方案,加一个别名就可以了select*from(select*fromjt_noteswherecreateUs......