在C ++中每n个订单应用折扣

假设在一家超市有销售,那么每n个客户都会有一个折扣。考虑超市中的某些产品,第i个产品的ID为产品[i],而该产品的每单位价格为价格[i]。在这里,系统将计算客户数量,当第n位客户到达时,他/她将在账单上享有折扣。然后,系统将再次开始计算客户。顾客订购一定数量的每种产品,其中product [i]是顾客订购的第i个产品的id,而amount [i]是顾客订购该产品的单位数。因此,我们必须实施此系统。收银员类将具有以下方法

  • 收银员(int n,int折扣,int []产品,int []价格)此构造函数用于使用n,折扣,产品及其价格初始化对象。

  • double getBill(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