Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ใช้ส่วนลดทุกคำสั่งซื้อใน C++


สมมติว่ามีการขายในซูเปอร์มาร์เก็ต ลูกค้าทุกคนจะมีส่วนลด พิจารณาว่ามีผลิตภัณฑ์บางอย่างในซูเปอร์มาร์เก็ตที่รหัสของผลิตภัณฑ์ที่ i คือ products[i] และราคาต่อหน่วยของผลิตภัณฑ์นี้คือราคา[i] ที่นี่ระบบจะนับจำนวนลูกค้า และเมื่อลูกค้าคนที่ n มาถึง เขา/เธอจะมีส่วนลดในบิล จากนั้นระบบจะเริ่มนับลูกค้าอีกครั้ง ลูกค้าสั่งซื้อจำนวนหนึ่งของแต่ละผลิตภัณฑ์ โดยที่ product[i] คือ id ของผลิตภัณฑ์ที่ i-th ที่ลูกค้าสั่งซื้อ และ จำนวน [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]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • กำหนดแผนที่ที่เรียกว่าคำสั่ง

  • แคชเชียร์จะทำงานดังนี้ -

  • สกุลเงิน :=0

  • สำหรับฉันอยู่ในช่วง 0 ถึงขนาดของอาร์เรย์ราคา

    • สั่งซื้อ[ผลิต[i]] :=ราคา[i]

  • กำหนดส่วนลดตามอัตราส่วนลดที่กำหนด

  • วิธี getBill จะทำงานดังนี้ -

  • เพิ่ม curr ขึ้น 1, set flag :=true, if curr =n, มิฉะนั้นเป็นเท็จ

  • ถ้า curr =n ให้ตั้งค่า curr :=0

  • ยกเลิก :=0

  • สำหรับฉันอยู่ในช่วง 0 ถึงขนาดของอาร์เรย์ผลิตภัณฑ์ – 1

    • x :=โปร[i]

    • ราคา :=สั่งซื้อ[x]

    • y :=amount[i]

    • เพิ่มการถอนคืนตามต้นทุน * y

  • หากตั้งค่าสถานะไว้ ret :=ret – (ret * discount) / 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