এই সমস্যায়, আমাদেরকে পূর্ণসংখ্যার একটি অ্যারে [] দেওয়া হয়েছে। আমাদের কাজ হল C++ এ সংলগ্ন উপাদানগুলি বিবেচনা না করে অ্যারেতে সর্বাধিক সেট বিট সমষ্টি গণনা করার জন্য একটি প্রোগ্রাম তৈরি করা।
সমস্যা বর্ণনা - এখানে, আমাদের একটি অ্যারে আছে []। আমাদের প্রতিটি সংখ্যার জন্য সেট বিটের সংখ্যা খুঁজে বের করতে হবে। তারপর, আমরা অ্যারের সংলগ্ন উপাদানগুলিতে সর্বাধিক সেট বিট সমষ্টি খুঁজে পাব। যেমন a[i] + a[i+2] ….
এর জন্য সর্বাধিক যোগফলসমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
arr[] = {1, 4, 6, 7}
আউটপুট
4
ব্যাখ্যা
বাইনারি আকারে উপাদানের সাথে অ্যারে
arr[] = {01, 100, 101, 111} Bit count array = {1, 1, 2, 3}
বিকল্প বিট গণনা,
arr[0] + arr[2] = 1 + 2 = 3 arr[1] + arr[3] = 1 + 3 = 4
সর্বোচ্চ যোগফল =4.
সমাধান পদ্ধতি
এই সমস্যাটি সমাধান করার জন্য, আমরা কেবল সংখ্যায় সেট বিটের সংখ্যা খুঁজে পাব। এবং বিকল্প জুটি খুঁজুন যেখানে সেট বিটের সর্বাধিক গণনা রয়েছে।
সর্বাধিক যোগফল 0 দিয়ে শুরু হওয়া বা 1 দিয়ে শুরু হওয়া অ্যারের জন্য হবে। তাই, আমাদের কেবল তাদের দুটির ক্ষেত্রে পরীক্ষা করতে হবে।
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,
উদাহরণ
#include<iostream> using namespace std; int countSetBit(int n){ int setBits = 0; while(n) { setBits++; n = n & (n - 1); } return setBits; } int findMaxBitAltSubArray(int arr[], int n){ int EvenSum = countSetBit(arr[0]); int OddSum = 0; for (int i = 1; i < n; i++){ if(i % 2 == 0){ EvenSum += countSetBit(arr[i]); } else { OddSum += countSetBit(arr[i]); } } if(EvenSum >= OddSum){ return EvenSum; } return OddSum; } int main() { int arr[] = {1, 4, 6, 7}; int n = 4; cout<<"The maximum set bit sum in the array without considering adjacent elements is "<<findMaxBitAltSubArray(arr, n); return 0; }
আউটপুট
The maximum set bit sum in the array without considering adjacent elements is 4