Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 n 주문마다 할인 적용


슈퍼마켓에서 세일이 있다고 가정하면 n명의 고객마다 할인이 있을 것입니다. 슈퍼마켓에 i 번째 제품의 id가 products[i]이고 이 제품의 단위당 가격이 price[i]인 일부 제품이 있다고 가정합니다. 여기에서 시스템은 고객 수를 계산하고 n번째 고객이 도착하면 청구서에 대해 할인을 받습니다. 그러면 시스템이 고객을 다시 계산하기 시작합니다. 고객은 각 제품의 일정량을 주문합니다. 여기서 product[i]는 고객이 주문한 i번째 제품의 id이고 amount[i]는 고객이 해당 제품을 주문한 단위 수입니다. 그래서 우리는 이 시스템을 구현해야 합니다. 계산원 클래스에는 다음 메서드가 있습니다.

  • Cashier(int n, int discount, int[] products, int[] 가격) 이 생성자는 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라는 맵 정의

  • 계산원은 다음과 같이 일합니다 -

  • 커 :=0

  • 범위 0에서 가격 배열의 크기까지의 i에 대해

    • 주문[생산[i]] :=가격[i]

  • 주어진 할인율로 할인 설정

  • getBill 메소드는 다음과 같이 작동합니다 -

  • curr을 1 증가, 플래그 설정 :=curr =n이면 true, 그렇지 않으면 false

  • curr =n이면 curr :=0으로 설정

  • ret :=0

  • 범위 0에서 제품 배열 크기 - 1에 있는 i의 경우

    • x :=프로[i]

    • 비용 :=주문[x]

    • y :=금액[i]

    • 비용으로 ret 증가 * y

  • 플래그가 설정되면 ret :=ret – (ret * 할인) / 100

  • 리턴 렛

예시(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