কম্পিউটার

C++ এ প্রতিটি n অর্ডারে ছাড় প্রয়োগ করুন


ধরুন একটি সুপারমার্কেটে একটি বিক্রয় আছে, প্রতি n গ্রাহকের জন্য একটি ছাড় থাকবে৷ বিবেচনা করুন সুপারমার্কেটে এমন কিছু পণ্য রয়েছে যেখানে i-th পণ্যের আইডি হল পণ্য[i] এবং এই পণ্যের প্রতি ইউনিটের দাম হল দাম[i]। এখানে সিস্টেম গ্রাহকের সংখ্যা গণনা করবে এবং যখন n-তম গ্রাহক আসবে তখন তার বিলের উপর ছাড় থাকবে। তারপরে সিস্টেমটি আবার গ্রাহক গণনা শুরু করবে। গ্রাহক প্রতিটি পণ্যের একটি নির্দিষ্ট পরিমাণ অর্ডার করে যেখানে পণ্য [i] হল গ্রাহকের অর্ডারকৃত i-তম পণ্যের আইডি এবং পরিমাণ [i] হল গ্রাহক সেই পণ্যটির অর্ডার করা ইউনিটের সংখ্যা। তাই আমাদের এই ব্যবস্থা বাস্তবায়ন করতে হবে। ক্যাশিয়ার ক্লাসে এই পদ্ধতিগুলি থাকবে

  • ক্যাশিয়ার(int n, int ডিসকাউন্ট, int[] পণ্য, int[] মূল্য) এই কনস্ট্রাক্টরটি n, ডিসকাউন্ট, পণ্য এবং তাদের দাম দিয়ে বস্তুর সূচনা করতে ব্যবহৃত হয়।

  • দ্বিগুণ getBill(int[] পণ্য, int[] পরিমাণ) এটি বিলের মূল্য ফেরত দেবে এবং প্রয়োজনে ডিসকাউন্ট প্রয়োগ করবে। প্রকৃত মানের 10^-5 এর মধ্যে উত্তরগুলি সঠিক হিসাবে গ্রহণ করা হবে।

উদাহরণস্বরূপ , ক্যাশিয়ার ব্যবহার করে ক্যাশিয়ার শুরু করুন

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, অন্যথায় মিথ্যা

  • যদি curr =n, তাহলে curr :=0

    সেট করুন
  • ret :=0

  • i এর জন্য রেঞ্জ 0 থেকে প্রোডাক্ট অ্যারের আকার - 1

    • x :=pro[i]

    • খরচ :=অর্ডার [x]

    • y :=পরিমাণ[i]

    • খরচ দ্বারা ret বাড়ান * 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

  1. C++ এ একই অ্যারেতে প্রতিটি উপাদানের মেঝে

  2. প্রাইম হিসাবে প্রতিটি জোড়ার সমষ্টি সহ C++ বৃহত্তম উপসেট

  3. C++ এ প্রতিটি সন্নিবেশের পর Kth ক্ষুদ্রতম উপাদান

  4. সি++ ব্যবহার করে ওপেনসিভিতে হিস্টোগ্রাম ইকুয়ালাইজার কীভাবে প্রয়োগ করবেন?