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

C++-এ একই সংখ্যক সেট বিট 가진 সর্বোচ্চ সংখ্যক কন্টiguous অ্যারে উপাদান

আমাদের একটি আনসর্টেড ইন্টিজার অ্যারে দেওয়া আছে। কাজ হলো দুটি জিনিস নির্ণয় করা: (১) একই সংখ্যক সেট বিট वाले উপাদান এবং (২) সেই উপাদানগুলো অ্যারেতে কন্টিগুয়াস (সান্নিহিত) অবস্থানে থাকতে হবে।

ইনপুট

int arr[] = { 5, 8, 1, 2, 9, 12}

আউটপুট: একই সংখ্যক সেট বিট 가진 সর্বোচ্চ সংখ্যক কন্টিগুয়াস অ্যারে উপাদান - 3

ব্যাখ্যা: অ্যারের প্রতিটি উপাদানের বাইনারি রিপ্রেজেন্টেশন এবং সেট বিট গণনা:

arr[0] = 5  => 0101 => সেট বিট: 2
arr[1] = 8  => 1000 => সেট বিট: 1
arr[2] = 1  => 0001 => সেট বিট: 1
arr[3] = 2  => 0010 => সেট বিট: 1
arr[4] = 9  => 1001 => সেট বিট: 2
arr[5] = 12 => 1100 => সেট বিট: 2

একই সংখ্যক সেট বিট (২) এবং কন্টিগুয়াস অবস্থানে থাকা উপাদানগুলো হলো 5, 9 এবং 12। তাই সর্বোচ্চ সংখ্যা ৩।

ইনপুট: int arr[] = { 5, 8, 1, 2}

আউটপুট: একই সংখ্যক সেট বিট 가진 সর্বোচ্চ সংখ্যক কন্টিগুয়াস অ্যারে উপাদান - 2

ব্যাখ্যা: এখানে 1 এবং 2 দুটো উপাদানের সেট বিট ১ এবং এগুলো কন্টিগুয়াস। তাই সর্বোচ্চ সংখ্যা ২।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • ইন্টিজার টাইপের অ্যারে উপাদান ইনপুট নেওয়া।
  • size() ফাংশন দিয়ে অ্যারের আকার নির্ণয় করে ফাংশনে পাস করা।
  • temp = 1 এবং maximum = 1 ইনিশিয়ালাইজ করা।
  • vector vec ডিক্লেয়ার করা।
  • 0 থেকে size-1 পর্যন্ত লুপে প্রতিটি উপাদানের সেট বিট __builtin_popcount() দিয়ে গণনা করে vec-এ স্টোর করা।
  • 1 থেকে vec.size()-1 পর্যন্ত লুপে vec[i] == vec[i-1] কিনা চেক করা (সদ্য দিয়ে যাওয়ায় i+1 বাদ দিয়ে i-1 দিয়ে চেক করা উচিত)।
  • যদি সমান হয় তবে temp++ আর না হলে temp = 1।
  • maximum = max(maximum, temp) আপডেট করা।
  • maximum রিটার্ন করা।
  • ফলাফল প্রিন্ট করা।

উদাহরণ কোড

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

int maximum_SameBits(int arr[], int size){
    int temp = 1;
    int maximum = 1;
    vector vec;
    for (int i = 0; i < size; i++){
        vec.push_back(__builtin_popcount(arr[i]));
    }
    for (int i = 1; i < vec.size(); i++){
        if (vec[i] == vec[i-1]){
            temp++;
        }
        else{
            temp = 1;
        }
        maximum = max(maximum, temp);
    }
    return maximum;
}

int main(){
    int arr[] = { 5, 8, 1, 2, 9, 12};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum number of contiguous array elements with same number of set bits are: " << maximum_SameBits(arr, size);
    return 0;
}

আউটপুট

Maximum number of contiguous array elements with same number of set bits are: 3
  1. C++ তে প্রাইম ফ্রিকোয়েন্সি والے অ্যারে উপাদান খুঁজে বের করা

  2. C++ প্রোগ্রাম: সংখ্যার সেট ও আনসেট বিটের সংখ্যা সমান কিনা চেক

  3. C++-এ সেট বিট কাউন্ট অনুযায়ী অ্যারে সর্ট করা

  4. C++-এ k সেট বিটস সহ একটি নম্বরকে ম্যাক্সিমাইজ করতে ন্যূনতম ফ্লিপ বের করা