C++ 中每 N 个订单应用折扣
假设超市正在进行促销活动,每到第 n 位顾客就会享受折扣。考虑超市中有一些产品,其中第 i 个产品的 ID 为 products[i],该产品的单价为 prices[i]。系统将计算顾客数量,当第 n 位顾客到达时,他/她将享受账单折扣。然后系统将重新开始计算顾客数量。顾客订购了每种产品的特定数量,其中 product[i] 是顾客订购的第 i 个产品的 ID,amount[i] 是顾客订购的该产品的数量。所以我们必须实现这个系统。Cashier 类将具有以下方法
Cashier(int n, int discount, int[] products, int[] prices) 此构造函数用于使用 n、折扣、产品及其价格初始化对象。
double getBill(int[] product, int[] amount) 这将返回账单的值,并在需要时应用折扣。实际值的 10^-5 以内的答案将被接受为正确。
例如,使用 Cashier(3, 50, [1,2,3,4,5,6,7], [100,200,300,400,300,200,100]) 初始化 Cashier,现在调用 getBill 方法 -
getBill([1,2],[1,2]), getBill([3,7],[10,10]), getBill([1,2,3,4,5,6,7],[1,1,1,1,1,1,1]), getBill([4],[10]), getBill([7,3],[10,10]), getBill([7,5,3,1,6,4,2],[10,10,10,9,9,9,7]), getBill([2,3,5],[5,3,2]), then the outputs will be [500.0, 4000.0, 800.0, 4000.0, 4000.0, 7350.0, 2500.0]
为了解决这个问题,我们将遵循以下步骤 -
定义一个名为 order 的映射
Cashier 的工作原理如下 -
curr := 0
对于 i 的范围为 0 到 prices 数组的大小
order[produce[i]] := prices[i]
设置折扣为给定的折扣率
getBill 方法的工作原理如下 -
将 curr 增加 1,设置 flag := true,如果 curr = n,否则为 false
如果 curr = n,则设置 curr := 0
ret := 0
对于 i 的范围为 0 到 product 数组的大小 - 1
x := pro[i]
cost := order[x]
y :=amount[i]
将 ret 增加 cost * y
如果设置了 flag,则 ret := ret – (ret * discount) / 100
返回 ret
示例(C++)
让我们看看以下实现以获得更好的理解 -
#include <bits/stdc++.h> using namespace std; class Cashier { public: int curr; map <double, double> order; int n; int discount; Cashier(int n, int discount, vector<int>& pro, vector<int>& p) { curr = 0; for(int i = 0; i < p.size(); i++){ order[pro[i]] = p[i]; } this->n = n; this->discount = discount; } double getBill(vector<int> pro, vector<int> am) { curr++; bool flag = curr == n; if(curr == n){ curr = 0; } double ret = 0; for(int i = 0; i < pro.size(); i++){ double x = pro[i]; double cost = order[x]; double y = am[i]; ret += (cost * y); } if(flag) ret = ret - (ret * discount) / 100; return ret; } }; main(){ vector<int> v1 = {1,2,3,4,5,6,7}, v2 = {100,200,300,400,300,200,100}; Cashier ob(3, 50, v1, v2); v1 = {1,2}, v2 = {1,2}; cout << (ob.getBill(v1, v2)) << endl; v1 = {3,7}, v2 = {10,10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {1,2,3,4,5,6,7}, v2 = {1,1,1,1,1,1,1}; cout << (ob.getBill(v1, v2)) << endl; v1 = {4}, v2 = {10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {7,3}, v2 = {10,10}; cout << (ob.getBill(v1, v2)) << endl; v1 = {7,5,3,1,6,4,2}, v2 = {10,10,10,9,9,9,7}; cout << (ob.getBill(v1, v2)) << endl; v1 = {2,3,5}, v2 = {5,2,3}; cout << (ob.getBill(v1, v2)) << endl; }
输入
See the main function
输出
500 4000 800 4000 4000 7350 2500