Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में हर n ऑर्डर पर छूट लागू करें


मान लीजिए कि सुपरमार्केट में कोई बिक्री है, तो प्रत्येक ग्राहक को छूट मिलेगी। विचार करें कि सुपरमार्केट में कुछ उत्पाद हैं जहां i-वें उत्पाद की आईडी उत्पाद है[i] और इस उत्पाद की प्रति यूनिट कीमत मूल्य है[i]। यहां सिस्टम ग्राहकों की संख्या की गणना करेगा और जब n-th ग्राहक आएगा तो उसे बिल पर छूट मिलेगी। फिर सिस्टम फिर से ग्राहकों की गिनती शुरू कर देगा। ग्राहक प्रत्येक उत्पाद की एक निश्चित मात्रा का आदेश देता है जहां उत्पाद [i] ग्राहक द्वारा ऑर्डर किए गए i-वें उत्पाद की आईडी है और राशि [i] उस उत्पाद के लिए ग्राहक द्वारा ऑर्डर की गई इकाइयों की संख्या है। इसलिए हमें इस प्रणाली को लागू करना होगा। कैशियर वर्ग के पास ये तरीके होंगे

  • कैशियर (int n, int छूट, int [] उत्पाद, int [] मूल्य) इस कंस्ट्रक्टर का उपयोग ऑब्जेक्ट को n, छूट, उत्पादों और उनकी कीमतों के साथ आरंभ करने के लिए किया जाता है।

  • डबल गेटबिल (इंट [] उत्पाद, इंट [] राशि) यह बिल का मूल्य वापस कर देगा और यदि आवश्यक हो तो छूट लागू करेगा। वास्तविक मान के 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]

  • दी गई छूट दर के अनुसार छूट सेट करें

  • गेटबिल विधि इस प्रकार काम करेगी -

  • 1 से कर्व बढ़ाएँ, ध्वज सेट करें:=सत्य, यदि curr =n, अन्यथा असत्य

  • अगर curr =n, तो curr सेट करें:=0

  • रिट:=0

  • मैं के लिए 0 से उत्पाद सरणी के आकार में - 1

    • एक्स:=समर्थक [i]

    • लागत:=आदेश [x]

    • y:=राशि [i]

    • लागत से रिट बढ़ाएँ * y

  • अगर फ्लैग सेट है, तो रिट :=रिट - (रिट * डिस्काउंट) / 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++ प्राइम के रूप में प्रत्येक जोड़ी के योग के साथ सबसे बड़ा उपसमुच्चय

    दिए गए सरणी से सबसे बड़ा उपसमुच्चय ज्ञात करना जिसमें प्रत्येक जोड़ी का योग एक अभाज्य संख्या है। मान लें कि अधिकतम तत्व 100000 है, उदाहरण के लिए - Input: nums[ ] = { 3, 2, 1,1 } Output: size = 3, subset = { 2, 1, 1 } Explanation: Subsets can be formed: {3, 2}, {2, 1} and { 2, 1, 1}, In {2, 1, 1} sum

  1. C++ में प्रत्येक प्रविष्टि के बाद Kth सबसे छोटा तत्व

    इस ट्यूटोरियल में, हम k-th . खोजने जा रहे हैं प्रत्येक प्रविष्टि के बाद सबसे छोटा तत्व। हम समस्या को हल करने के लिए मिन-हीप का उपयोग करने जा रहे हैं। आइए कार्यक्रम को पूरा करने के चरणों को देखें। यादृच्छिक डेटा के साथ सरणी प्रारंभ करें। प्राथमिकता कतार प्रारंभ करें। k - 1 तक कोई k-th नहीं होगा सबस

  1. C++ का उपयोग करके OpenCV में हिस्टोग्राम इक्वलाइज़र कैसे लागू करें?

    हिस्टोग्राम एक छवि की गहराई की तीव्रता का प्रतिनिधित्व करता है। उदाहरण के लिए, 8 बिट की रंग गहराई वाली छवि पर विचार करें। इसका मतलब है कि प्रत्येक पिक्सेल में रंग की गहराई 0 से मीन्स 0 से 255 तक हो सकती है। यदि छवि RGB छवि है, तो इसमें लाल, हरा और नीला चैनल है। उदाहरण के लिए, छवि के बिंदु पर केवल ला