[LeetCode] 1357. Apply Discount Every n Orders 每隔n個顧客打折
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 withn, thediscount, and theproductsand theirprices.double getBill(int[] product, int[] amount)Returns the final total of the bill with the discount applied (if any). Answers within10-5of 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 <= 1040 <= discount <= 1001 <= products.length <= 200prices.length == products.length1 <= products[i] <= 2001 <= prices[i] <= 1000- The elements in
productsare unique. 1 <= product.length <= products.lengthamount.length == product.lengthproduct[j]exists inproducts.1 <= amount[j] <= 1000- The elements of
productare unique. - At most
1000calls will be made togetBill. - Answers within
10-5of 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


浙公網安備 33010602011771號