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

C++-এ পাওয়ার ভ্যালু দিয়ে ইন্টিজার সোর্ট করা


আমরা জানি একটি ইন্টিজার x-এর পাওয়ার বলতে নিচের ধাপগুলো ব্যবহার করে x কে ১-এ রূপান্তর করার জন্য কত স্টেপ লাগে সেটি বোঝায় −

  • যদি x সম হয় তবে x = x / 2

  • যদি x বিজোড় হয় তবে x = 3 * x + 1

উদাহরণস্বরূপ, x = 3-এর পাওয়ার ৭ কারণ ৩ ৭ স্টেপে ১ হয় (3 → 10 → 5 → 16 → 8 → 4 → 2 → 1)। যদি আমাদের কিছু ইন্টিজার lo, hi এবং k থাকে। আমাদের [lo, hi] ইন্টারভালের সকল ইন্টিজারকে পাওয়ার ভ্যালু অনুযায়ী অ্যাসেন্ডিং অর্ডারে সোর্ট করতে হবে। যদি দুটি বা অধিক ইন্টিজারের পাওয়ার ভ্যালু একই হয়, তবে সেগুলো অ্যাসেন্ডিং অর্ডারে সোর্ট করুন। [lo, hi] রেঞ্জে পাওয়ার ভ্যালু দিয়ে সোর্ট করা k-তম ইন্টিজার বের করতে হবে।

উদাহরণস্বরূপ, lo = 12, hi = 15, k = 2 হলে আউটপুট হবে ১৩। কারণ ১২-এর পাওয়ার ৯, ১৩-এর পাওয়ার ৯, ১৪-এর ১৭, ১৫-এর ১৭। সোর্টেড সিকোয়েন্স [12,13,14,15] এবং k = 2 হলে এলিমেন্ট ১৩।

সমাধানের ধাপগুলো:

  • getTurn মেথড ডিফাইন করুন, যা n ইনপুট নেবে

  • ret := 0

  • যখন n ১ নয়

    • যদি n বিজোড় হয়, তবে n := n * 3 + 1, অন্যথায় n := n / 2

    • ret ১ বাড়ান

  • মেইন মেথড থেকে

  • i = lo থেকে hi পর্যন্ত লুপ চালান

    • পেয়ার (getTurn(i), i) বানান

    • ret-এ পশ করুন

  • পেয়ারগুলো পাওয়ার অনুযায়ী সোর্ট করুন, অন্যথায় অ্যাসেন্ডিং অর্ডারে

  • ret[k - 1]-এর সেকেন্ড ভ্যালু রিটার্ন করুন

উদাহরণ (C++)

নিচের ইমপ্লিমেন্টেশন দেখুন ভালো বুঝতে −

#include <bits/stdc++.h> using namespace std; class Solution { public:    vector < pair <int, int> > ret;    static bool cmp(pair <int, int>& a, pair <int, int>& b){       return a.first == b.first ? a.second < b.second : a.first < b.first;    }    int getTurn(int n){       int ret = 0;       while(n != 1){          if(n & 1){             n = n * 3 + 1;          }          else n >>= 1;             ret ++;       }       return ret;    }    int getKth(int lo, int hi, int k) {       for(int i = lo; i <= hi; i++){          pair <int, int> temp;          temp.first = getTurn(i);          temp.second = i;          ret.push_back(temp);       }       sort(ret.begin(), ret.end(), cmp);       return ret[k - 1].second;    } }; main(){    Solution ob;    cout << (ob.getKth(12, 15, 2)); }

ইনপুট

12 15 2

আউটপুট

13
  1. C++-এ The Maze III সমস্যা সমাধান

  2. C++-এ বোগোসর্ট বা পারমুটেশন সর্ট প্রোগ্রাম

  3. C++-এ টেমপ্লেট মেটাপ্রোগ্রামিং

  4. শেকার সার্ট বাস্তবায়ন করার C++ প্রোগ্রাম