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

C++ में हर n ऑर्डर पर डिस्काउंट लागू करना


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

  • Cashier(int n, int discount, int[] products, int[] prices) यह कंस्ट्रक्टर n, डिस्काउंट, प्रोडक्ट्स, और उनकी कीमतों के साथ ऑब्जेक्ट को इनिशियलाइज़ करता है।

  • double getBill(int[] product, int[] amount) यह बिल का वैल्यू लौटाएगा और जरूरत पड़ने पर डिस्काउंट लागू करेगा। वास्तविक वैल्यू के 10^-5 के भीतर उत्तर सही माने जाएंगे।

उदाहरण के लिए, Cashier को Cashier(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]), तब आउटपुट होंगे [500.0, 4000.0, 800.0, 4000.0, 4000.0, 7350.0, 2500.0]

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • order नाम का एक मैप डिफाइन करें

  • Cashier इस तरह काम करेगा:

    • curr := 0

    • i को 0 से prices ऐरे के साइज तक लूप करें:

      • order[products[i]] := prices[i]

    • दिए गए डिस्काउंट रेट के रूप में डिस्काउंट सेट करें

  • getBill मेथड इस तरह काम करेगा:

    • curr को 1 से बढ़ाएं, flag := true सेट करें अगर curr = n, अन्यथा false

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

    • ret := 0

    • i को 0 से प्रोडक्ट ऐरे के साइज - 1 तक लूप करें:

      • x := pro[i]

      • cost := order[x]

      • y := amount[i]

      • ret को cost * y से बढ़ाएं

    • अगर flag सेट है, तो ret := ret - (ret * discount) / 100

    • ret लौटाएं

उदाहरण (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;
    }
};

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

इनपुट

मुख्य फंक्शन देखें

आउटपुट

500 4000 800 4000 4000 7350 2500

  1. - C++ में प्रत्येक जोड़े का योग अभाज्य होने वाला सबसे बड़ा उपसमुच्चय

    दी गई सरणी से सबसे बड़ा उपसमुच्चय ढूंढना जिसमें प्रत्येक जोड़े का योग एक अभाज्य संख्या हो। अधिकतम तत्व 100000 मानकर, उदाहरण के लिए -इनपुट: nums[] = { 3, 2, 1, 1 } आउटपुट: आकार = 3, उपसमुच्चय = { 2, 1, 1 } व्याख्या: उपसमुच्चय बन सकते हैं: {3, 2}, {2, 1} और { 2, 1, 1}, {2, 1, 1} में जोड़ी (2,1) का योग

  1. - C++ में प्रत्येक सम्मिलन के बाद kवां सबसे छोटा तत्व

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

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

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