এই সমস্যায় একটি পূর্ণসংখ্যার অ্যারে arr[] দেওয়া আছে। আমাদের C++-এ সন্নিহিত উপাদান বাদে অ্যারেতে সর্বোচ্চ সেট বিট যোগফল বের করার প্রোগ্রাম লিখতে হবে।
সমস্যার বিবরণ - এখানে একটি অ্যারে arr[] দেওয়া আছে। প্রতিটি সংখ্যার সেট বিটের সংখ্যা বের করতে হবে। তারপর সন্নিহিত উপাদান বাদে (a[i] + a[i+2] ...) সর্বোচ্চ সেট বিট যোগফল বের করতে হবে।
উদাহরণ:
ইনপুট
arr[] = {1, 4, 6, 7}আউটপুট
4
ব্যাখ্যা
বাইনারি রূপে অ্যারে: {01, 100, 101, 111}। সেট বিট কাউন্ট: {1, 1, 2, 3}
বিকল্প সেট বিট যোগফল: arr[0]+arr[2]=1+2=3, arr[1]+arr[3]=1+3=4। সর্বোচ্চ যোগফল = ৪।
সমাধানের পদ্ধতি
প্রতিটি সংখ্যার সেট বিট গণনা করুন। তারপর ০ বা ১ থেকে শুরু হওয়া দুটি বিকল্প সিরিজের যোগফল বের করুন এবং সর্বোচ্চটি নিন।
উদাহরণ
#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 "<আউটপুট
The maximum set bit sum in the array without considering adjacent elements is 4