在C ++中每n个订单应用折扣
假设在一家超市有销售,那么每n个客户都会有一个折扣。考虑超市中的某些产品,第i个产品的ID为产品[i],而该产品的每单位价格为价格[i]。在这里,系统将计算客户数量,当第n位客户到达时,他/她将在账单上享有折扣。然后,系统将再次开始计算客户。顾客订购一定数量的每种产品,其中product[i]是顾客订购的第i个产品的id,而amount[i]是顾客订购该产品的单位数。因此,我们必须实施此系统。收银员类将具有以下方法
收银员(intn,int折扣,int[]产品,int[]价格)此构造函数用于使用n,折扣,产品及其价格初始化对象。
doublegetBill(int[]product,int[]amount)将返回账单的值,并在需要时应用折扣。实际值的10^-5以内的答案将被认为是正确的。
对于例如,初始化使用出纳出纳(3,50,[1,2,3,4,5,6,7],[100,200,300,400,300,200,100]),现在请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]
为了解决这个问题,我们将遵循以下步骤-
定义一个称为订单的映射
收银员将工作如下-
curr:=0
为我在0到价格大小数组的范围内
订单[生产[i]]:=价格[i]
将折扣设置为给定的折扣率
getBill方法将如下工作:
将curr增加1,如果curr=n,则设置标志:=true,否则返回false
如果curr=n,则设置curr:=0
ret:=0
对于i,范围为0到产品数组的大小–1
x:=pro[i]
费用:=订单[x]
y:=金额[i]
通过成本增加ret*y
如果设置了标志,则ret:=ret–(ret*折扣)/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
热门推荐
10 香港老妈结婚祝福语简短
11 毕业立体贺卡祝福语简短
12 简短新年年会祝福语
13 评论小品祝福语大全简短
14 恭喜师兄结婚祝福语简短
15 员工集体辞职祝福语简短
16 高中新生祝福语 简短
17 装修祝福语男生搞笑简短
18 生日开业蛋糕祝福语简短