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

সি++-এ রিভিল কার্ডস ইন ইনক্রিজিং অর্ডার (Reveal Cards In Increasing Order)


মান লেযিয়ে একটি কার্ড ডেক আছে; প্রতিটি কার্ডের একটি یونিক নম্বর আছে। আমরা ডেককে যেকোনো ক্রমে অর্ডার করতে পারি। প্রাথমিকভাবে, সব কার্ড ফেস ডাউন (অনরিভিলড) অবস্থায় একটি ডেকে থাকে। এখন, সব কার্ড রিভিল না হওয়া পর্যন্ত নিচের ধাপগুলো বারবার করি -

  • যদি ডেকে কার্ড থাকে, ডেকের টপ কার্ডটি রিভিল করুন।

  • যদি ডেকে এখনও কার্ড থাকে, ডেকের পরবর্তী টপ কার্ডটি ডেকের বাটমে সরান।

  • যদি এখনও অনরিভিলড কার্ড থাকে, ধাপ ১-এ ফিরে যান। অন্যথায় প্রক্রিয়া বন্ধ করুন।

আমাদের ডেকের এমন একটি অর্ডার রিটার্ন করতে হবে যাতে কার্ডগুলো ক্রমবর্ধমান ক্রমে রিভিল হয়। আন্সারের প্রথম এন্ট্রিটি ডেকের টপ মনে করা হবে। ইনপুট [17,13,11,2,3,5,7] হলে আউটপুট [2,13,3,11,5,17,7]।

এটি সমাধান করার জন্য আমরা নিচের ধাপগুলো অনুসরণ করব -

  • প্রথমে ডেকটি সর্ট করুন, n := deck.size()

  • একটি কিউ q এবং n আকারের একটি ans অ্যারে সংজ্ঞায়িত করুন

  • q-তে ০ থেকে n-1 পর্যন্ত=i ইনসার্ট করুন

  • i = 0 থেকে n-1 পর্যন্ত লুপ চালান

    • x := q.front(), q.pop()

    • ans[x] := deck[i]

    • x := q.front(), q.pop()

    • q.push(x)

  • ans রিটার্ন করুন

নিচের বাস্তবায়নটি দেখে আরও ভালো বুঝতে পারবেন -

উদাহরণ

#include <bits/stdc++.h> using namespace std; void print_vector(vector<int> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class Solution {    public:    vector<int> deckRevealedIncreasing(vector& deck) {       sort(deck.begin(), deck.end());       int n = deck.size();       queue <int> q;       vector <int> ans(n);       for(int i = 0; i < n; i++)q.push(i);       int x;       for(int i = 0; i < n; i++){          x = q.front();          q.pop();          ans[x] = deck[i];          x = q.front();          q.pop();          q.push(x);       }       return ans;    } }; main(){    vector<int> v1 = {17,13,11,2,3,5,7};    Solution ob;    print_vector(ob.deckRevealedIncreasing(v1)); }

ইনপুট

[17,13,11,2,3,5,7]

আউটপুট

[2,13,3,11,5,17,7]

  1. C++-এ অপারেন্ডের ইভ্যালুয়েশন অর্ডার (Evaluation Order)

  2. n সংখ্যক অ্যারে থেকে ক্রমবর্ধমান কালে উপাদান নেয়ার সর্বোচ্চ যোগফল (C++ প্রোগ্রাম)

  3. বাড়মান সাবসিকোয়েন্সের সর্বোচ্চ গুণফল (C++ প্রোগ্রাম)

  4. C++-এ Binary Tree Vertical Order Traversal: বাইনারি ট্রির ভার্টিকাল অর্ডার ট্রাভার্সাল