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

C++ में फोन डायरेक्टरी डिजाइन - संख्या आवंटन, जांच और रिलीज


समस्या विवरण

मान लीजिए हम एक फोन डायरेक्टरी डिजाइन करना चाहते हैं जो निम्नलिखित ऑपरेशनों का समर्थन करता है:

  • get - एक ऐसी संख्या प्रदान करेगा जो किसी को आवंटित नहीं है
  • check - जांच करेगा कि कोई संख्या उपलब्ध है या नहीं
  • release - एक संख्या को रीसायकल या रिलीज करेगा

इनिशियलाइज़र का उपयोग करके, हम पहले n संख्याओं को इनिशियलाइज़ कर सकते हैं।

समाधान दृष्टिकोण

एक सेट और कतार का उपयोग करके कुशल कार्यान्वयन:

  1. एक सेट (s) परिभाषित करें - आवंटित संख्याओं को ट्रैक करने के लिए
  2. एक कतार (available) परिभाषित करें - उपलब्ध संख्याओं को स्टोर करने के लिए
  3. इनिशियलाइज़र maxNumbers लेगा
  4. N := maxNumbers
  5. 0 से N-1 तक सभी संख्याओं को available कतार में डालें
  6. get() फ़ंक्शन:
    • यदि available खाली है, तो -1 लौटाएं
    • x := available का पहला तत्व
    • x को s में डालें
    • available से हटाएं
    • x लौटाएं
  7. check(number) फ़ंक्शन:
    • यदि number >= N या number < 0, तो false लौटाएं
    • true लौटाएं यदि number s में नहीं है
  8. release(number) फ़ंक्शन:
    • यदि check(number) true है, तो लौट जाएं (पहले से उपलब्ध)
    • x := number
    • x को s से हटाएं
    • x को available में डालें

C++ कार्यान्वयन

#include <bits/stdc++.h> 
using namespace std; 

class PhoneDirectory { 
public: 
    set<int> s; 
    queue<int> available; 
    int N; 
    
    PhoneDirectory(int maxNumbers){ 
        N = maxNumbers; 
        for (int i = 0; i < N; i++) { 
            available.push(i); 
        } 
    } 
    
    int get(){ 
        if (available.size() == 0) 
            return -1; 
        int x = available.front(); 
        s.insert(x); 
        available.pop(); 
        return x; 
    } 
    
    bool check(int number){ 
        if (number >= N || number < 0) 
            return false; 
        return s.find(number) == s.end(); 
    } 
    
    void release(int number){ 
        if (check(number)) 
            return; 
        int x = number; 
        s.erase(x); 
        available.push(x); 
    } 
}; 

int main(){ 
    PhoneDirectory ob(3); 
    cout << (ob.get()) << endl; 
    cout << (ob.get()) << endl; 
    cout << (ob.check(2)) << endl; 
    cout << (ob.get()) << endl; 
    cout << (ob.check(2)) << endl; 
    ob.release(2); 
    cout << (ob.check(2)) << endl; 
    return 0;
}

इनपुट

ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);

आउटपुट

0 1 1 2 0 1
  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस

  1. - C++ में एडम नंबर जांचना

    इस खंड में हम देखेंगे कि दी गई संख्या एडम नंबर है या नहीं, इसकी जांच करने वाला प्रोग्राम कैसे लिखें। कोड में जाने से पहले देखते हैं कि एडम नंबर क्या है? एडम नंबर वह संख्या है, मान लीजिए n, यदि n का वर्ग और n के रिवर्स का वर्ग एक-दूसरे के रिवर्स हैं, तो वह संख्या एडम नंबर है। उदाहरण के लिए संख्या 13