কম্পিউটার টিউটোরিয়াল

C++-এ Design Phone Directory: ফোন ডিরেক্টরি ডিজাইন করা

একটি ফোন ডিরেক্টরি ডিজাইন করতে হবে যা নিচের অপারেশনগুলো সমর্থন করে:

  • get() - কোনো নম্বর দিন যেটি কারো কাছে অ্যাসাইন করা নেই।
  • check(number) - একটি নম্বর উপলব্ধ কিনা তা চেক করুন।
  • release(number) - একটি নম্বর রিসাইকেল বা রিলিজ করুন।

ইনিশিয়ালাইজার দিয়ে প্রথমে n সংখ্যক নম্বর инициалиজ করা যাবে।

সমাধানের পদ্ধতি

  1. একটি সেট s (ব্যবহৃত নম্বরগুলো রাখার জন্য) এবং একটি কিউ available (উপলব্ধ নম্বরগুলো রাখার জন্য) ঘোষণা করুন।
  2. কন্সট্রাক্টরে maxNumbers প্যারামিটার নিয়ে ০ থেকে maxNumbers-1 পর্যন্ত সব নম্বর available কিউতে পুশ করুন।
  3. get():
    • যদি available খালি হয়, তবে -1 রিটার্ন করুন।
    • কিউ থেকে ফ্রন্ট নম্বর নিন, সেটে যোগ করুন, কিউ থেকে পপ করুন এবং রিটার্ন করুন।
  4. check(number):
    • যদি নম্বর অপ্রাসঙ্গিক হয় (নেগেটিভ বা >= N), তবে false রিটার্ন করুন।
    • নম্বর সেটে নেই কিনা তা চেক করে রিটার্ন করুন।
  5. release(number):
    • যদি নম্বর ইতিমধ্যে উপলব্ধ থাকে (check(number) == true), তবে কিছু করবেন না।
    • নম্বর সেট থেকে মুছে কিউতে পুশ করুন।

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;   // 0
    cout << (ob.get()) << endl;   // 1
    cout << (ob.check(2)) << endl; // 1 (true)
    cout << (ob.get()) << endl;   // 2
    cout << (ob.check(2)) << endl; // 0 (false)
    ob.release(2);
    cout << (ob.check(2)) << endl; // 1 (true)
    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. Frugal সংখ্যা চেক করা (C++)

  2. C++ দিয়ে পেন্টাটপ (Pentatope) সংখ্যা বের করা

  3. সি++-এ নাম্বার অফ এনক্লেভস (Number of Enclaves)

  4. C++-এ অ্যাডাম সংখ্যা (Adam Number) চেক করার পদ্ধতি