Computer >> Máy Tính >  >> Lập trình >> C ++

Áp dụng chiết khấu cho mỗi n đơn hàng bằng C ++


Giả sử có một đợt giảm giá trong siêu thị, cứ n khách hàng sẽ có một đợt giảm giá. Hãy xem xét có một số sản phẩm trong siêu thị mà id của sản phẩm thứ i là sản phẩm [i] và giá trên một đơn vị sản phẩm này là giá [i]. Tại đây hệ thống sẽ đếm số lượng khách hàng và khi khách hàng thứ n đến sẽ có chiết khấu trên hóa đơn. Sau đó hệ thống sẽ bắt đầu đếm lại khách hàng. Khách hàng đặt hàng một số lượng nhất định của mỗi sản phẩm trong đó product [i] là id của sản phẩm thứ i mà khách hàng đã đặt và số lượng [i] là số lượng đơn vị sản phẩm mà khách hàng đã đặt. Vì vậy, chúng tôi phải thực hiện hệ thống này. Lớp Thu ngân sẽ có các phương thức này

  • Cashier (int n, int giảm giá, int [] sản phẩm, int [] giá) Hàm tạo này được sử dụng để Khởi tạo đối tượng với n, chiết khấu, sản phẩm và giá của chúng.

  • double getBill (int [] product, int [] amount) điều này sẽ trả về giá trị của hóa đơn và áp dụng chiết khấu nếu cần. Các câu trả lời trong vòng 10 ^ -5 giá trị thực tế sẽ được chấp nhận là đúng.

Ví dụ: , khởi tạo Cashier bằng Cashier (3, 50, [1,2,3,4,5,6,7], [100,200,300,400,300,200,100]), bây giờ gọi các phương thức 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]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một bản đồ được gọi là thứ tự

  • Thu ngân sẽ làm việc như sau -

  • curr:=0

  • cho tôi trong phạm vi từ 0 đến kích thước của mảng giá

    • đặt hàng [sản xuất [i]]:=giá [i]

  • đặt chiết khấu như tỷ lệ chiết khấu đã cho

  • Phương thức getBill sẽ hoạt động như sau -

  • tăng curr lên 1, đặt cờ:=true, nếu curr =n, nếu không thì false

  • nếu curr =n, thì hãy đặt curr:=0

  • ret:=0

  • cho tôi trong phạm vi từ 0 đến kích thước của mảng sản phẩm - 1

    • x:=pro [i]

    • chi phí:=đặt hàng [x]

    • y:=số tiền [i]

    • tăng ret theo chi phí * y

  • nếu cờ được đặt, thì ret:=ret - (ret * giảm giá) / 100

  • trả lại ret

Ví dụ (C ++)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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;
}

Đầu vào

See the main function

Đầu ra

500
4000
800
4000
4000
7350
2500