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

C++-এ একই সংখ্যক সেট বিট থাকা নম্বরগুলো যোগ করে ম্যাক্সিমাম সাম


সমস্যা বিবরণ

N সংখ্যার একটি অ্যারে দেওয়া আছে। একই সংখ্যক সেট বিট (১-এর সংখ্যা) থাকা নম্বরগুলো যোগ করে যা ম্যাক্সিমাম সাম পাওয়া যায় সেটা বের করতে হবে।

উদাহরণ

ইনপুট: {2, 5, 8, 9, 10, 7} -> আউটপুট: ২৪

  • 2: ১ সেট বিট
  • 5: ২ সেট বিট
  • 8: ১ সেট বিট
  • 9: ২ সেট বিট
  • 10: ২ সেট বিট
  • 7: ৩ সেট বিট

২ সেট বিট والے: 5+9+10 = ২৪ (ম্যাক্সিমাম)

অ্যালগরিদম

  • প্রতিটি এলিমেন্টের সেট বিট কাউন্ট করব।
  • ৩২ সাইজের অ্যারে sum[32] নিব (ম্যাক্স ৩২ সেট বিট ধরে)।
  • প্রতিটি এলিমেন্টকে তার সেট বিট কাউন্ট অনুযায়ী sum[bits] += arr[i] করব।
  • sum অ্যারেতে ম্যাক্সিমাম মান বের করব।

উদাহরণ

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

int bitCount(int n){
    int count = 0;
    while (n) {
        count++;
        n = n & (n - 1);
    }
    return count;
}

int maxSum(int arr[], int n){
    int bits[n];
    for (int i = 0; i < n; i++) {
        bits[i] = bitCount(arr[i]);
    }
    int sum[32] = { 0 };
    for (int i = 0; i < n; i++) {
        sum[bits[i]] += arr[i];
    }
    int maximum = 0;
    for (int i = 0; i < 32; i++) {
        maximum = max(sum[i], maximum);
    }
    return maximum;
}

int main(){
    int arr[] = {2, 5, 8, 9, 10, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum sum = " << maxSum(arr, n) << endl;
    return 0;
}

আউটপুট

Maximum sum = 24

  1. C++-এ দেওয়া যোগফলের সাথে সর্বোচ্চ আকারের সাবসেট

  2. C++-এ অসুন্দর সংখ্যা (Ugly Numbers) ধারণকারী সাব-অ্যারের সর্বোচ্চ দৈর্ঘ্য

  3. C++ ব্যবহার করে ম্যাট্রিক্সে সর্বোচ্চ যোগফল করা কলাম বের করা

  4. C++-এ দুটি সংখ্যার অল্টারনেট বিট দিয়ে নতুন সংখ্যা তৈরি করা