কম্পিউটার

C++ এ একই সংখ্যক সেট বিট সহ সংলগ্ন অ্যারে উপাদানের সর্বাধিক সংখ্যা


আমাদেরকে পূর্ণসংখ্যার উপাদানগুলির একটি সাজানো না করা অ্যারে দেওয়া হয়েছে এবং কাজটি হল দুটি প্রধান জিনিস গণনা করা।

  • একই সংখ্যক সেট বিট সহ উপাদানগুলি
  • এছাড়া, একই সেট বিট সহ উপাদানগুলি প্রকৃতিতে সংলগ্ন হওয়া উচিত।

ইনপুট

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

আউটপুট − একই সংখ্যক সেট বিট সহ সংলগ্ন অ্যারে উপাদানগুলির সর্বাধিক সংখ্যা হল − 3

ব্যাখ্যা − আমরা একটি অ্যারের উপাদানগুলির জন্য বাইনারি অঙ্কগুলি গণনা করব এবং তাদের সেট বিটগুলি গণনা করব৷

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1
arr[4] = 9 => 1001 => total set bits are -: 2
Arr[5] = 12 => 1100 => total set bits are -: 2

সুতরাং একই সংখ্যক সেট বিট সহ উপাদানগুলি এবং প্রকৃতিতে সংলগ্ন 5, 9 এবং 12৷ তাই একই সংখ্যক সেট বিট সহ সংলগ্ন অ্যারে উপাদানগুলির সর্বাধিক সংখ্যা 3

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

আউটপুট − একই সংখ্যক সেট বিট সহ সংলগ্ন অ্যারে উপাদানগুলির সর্বাধিক সংখ্যা হল − 2

ব্যাখ্যা − আমরা একটি অ্যারের উপাদানগুলির জন্য বাইনারি অঙ্কগুলি গণনা করব এবং তাদের সেট বিটগুলি গণনা করব৷

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1

সুতরাং একই সংখ্যক সেট বিট এবং প্রকৃতিতে সংলগ্ন উপাদানগুলি হল 1 এবং 2৷ সুতরাং একই সংখ্যক সেট বিট সহ সংলগ্ন অ্যারে উপাদানগুলির সর্বাধিক সংখ্যা হল 2

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

  • পূর্ণসংখ্যার প্রকারের অ্যারে উপাদানগুলি ইনপুট করুন

  • সাইজ ফাংশন ব্যবহার করে একটি অ্যারের আকার গণনা করুন এবং এটি ফাংশনে পাস করুন

  • একটি অস্থায়ী ভেরিয়েবল নিন এবং এটি মান 1 এ সেট করুন এবং মান 1 এর সাথে একটি সর্বোচ্চ পরিবর্তনশীলও।

  • টাইপ ভেক্টরের একটি পরিবর্তনশীল vec তৈরি করুন

  • 0 থেকে একটি অ্যারের আকার পর্যন্ত লুপটি শুরু করুন

  • "__builtin_popcount(element)" ফাংশন ব্যবহার করে অ্যারের উপাদানগুলির বাইনারি সেট বিট গণনা করুন যা এটিতে পাস করা একটি প্রদত্ত উপাদানের সেট বিটের মোট সংখ্যা ফিরিয়ে দেবে এবং ভেক্টরে গণনা সংরক্ষণ করতে থাকবে৷

  • 1 থেকে একটি ভেক্টরের আকার পর্যন্ত লুপ শুরু করুন

  • ভেক্টরের ভিতরে, vec[i+1] =vec[i] কিনা তা পরীক্ষা করুন তারপর temp-এর মান 1 দ্বারা বৃদ্ধি করুন

  • অন্যথায়, তাপমাত্রা সেট করুন 1

  • সর্বোচ্চ ফাংশন ব্যবহার করে টেম্প এবং সর্বোচ্চের মধ্যে সর্বোচ্চ মান বেছে নিয়ে সর্বোচ্চ সেট করুন।

  • সর্বাধিক পরিবর্তনশীল ফেরত দিন

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
//function to calculate maximum same number of bits
int maximum_SameBits(int arr[], int size){
   int temp = 1;
   int maximum = 1;
   vector<int> 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 + 1] == vec[i]){
         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 সেট বিট সহ একটি সংখ্যাকে সর্বাধিক করার জন্য ন্যূনতম ফ্লিপস প্রয়োজন।