मान लीजिए एक सुपरमार्केट में सेल है, हर 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