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

নেগেটিভ মান সহ অ্যারেতে জোড়া গুণফলের সর্বোচ্চ যোগফল (C++ প্রোগ্রাম)

এই সমস্যাতে, আমাদের একটি অ্যারে arr[] দেওয়া আছে যাতে n সংখ্যক পূর্ণসংখ্যা মান রয়েছে (নেগেটিভ মানও থাকতে পারে)। আমাদের কাজ হল नेগেটিভ মান সহ অ্যারেতে জোড়া গুণফলের সর্বোচ্চ যোগফল খুঁজে বের করার প্রোগ্রাম তৈরি করা।

সমস্যা বর্ণনা

অ্যারেতে উপাদানগুলো দিয়ে জোড়া তৈরি করতে হবে যেন জোড়া উপাদানগুলোর গুণফলের যোগফল সর্বোচ্চ হয়।

উদাহরণ ইনপুট
arr[] = {-5, 2, 3, 7, -1, 1, -3, 12}
আউটপুট
104
ব্যাখ্যা
বিবেচনা করার জোড়াগুলো: (-5, -3), (2, 3), (-1, 1), (7, 12)
গুণফলের যোগফল = (-5 * -3) + (2 * 3) + (-1 * 1) + (7 * 12) = 15 + 6 - 1 + 84 = 104
সমাধানের পদ্ধতি

সমস্যা সমাধানের জন্য, আমরা এমনভাবে জোড়া তৈরি করব যেন তাদের গুণফলের যোগফল সর্বোচ্চ হয়। যোগফল সর্বোচ্চ করার জন্য, একই চিহ্নের মানগুলোকে একসাথে জোড়া দিতে হবে। এটিকে সহজ बनाने জন্য অ্যারেটি সর্ট করে নেগেটিভ এবং পজিটিভ মানগুলো আলাদা করে জোড়া দিতে হবে। তারপর যদি একটি পজিটিভ বা নেগেটিভ বা উভয় মান জোড়ায় থাকে তবে সেগুলো যোগ করব এবং যদি এক নেগেটিভ এবং এক পজিটিভ থাকে তবে তাদের গুণফল যোগ করব।

অ্যালগরিদম

আরম্ভিকরণ:

maxSum = 0

ধাপ ১: অ্যারে arr[] সর্ট করুন।

ধাপ ২: অ্যারেতে সকল নেগেটিভ মানের জন্য লুপ চালান। জোড়া বানান এবং তাদের গুণফল maxSum-এ যোগ করুন।

ধাপ ৩: অ্যারেতে সকল পজিটিভ মানের জন্য লুপ চালান। জোড়া বানান এবং তাদের গুণফল maxSum-এ যোগ করুন।

ধাপ ৪: অবশিষ্ট মানগুলো চেক করুন।

  • ধাপ ৪.১: যদি একটি পজিটিভ মান অবশিষ্ট থাকে, maxSum-এ যোগ করুন।
  • ধাপ ৪.২: যদি একটি নেগেটিভ মান অবশিষ্ট থাকে, maxSum-এ যোগ করুন।
  • ধাপ ৪.৩: যদি একটি পজিটিভ এবং একটি নেগেটিভ মান অবশিষ্ট থাকে, তাদের গুণফল maxSum-এ যোগ করুন।

ধাপ ৫: maxSum ফেরত দিন।

C++ প্রোগ্রাম উদাহরণ
#include 
using namespace std;

long calcSumPairProd(int arr[], int n) {
    long maxSum = 0;
    sort(arr, arr + n);
    int i = 0, j = (n - 1);
    
    while (i < n && arr[i] < 0) {
        if (i != n - 1 && arr[i + 1] <= 0) {
            maxSum = (maxSum + (arr[i] * arr[i + 1]));
            i += 2;
        } else
            break;
    }
    
    while (j >= 0 && arr[j] > 0) {
        if (j != 0 && arr[j - 1] > 0) {
            maxSum = (maxSum + (arr[j] * arr[j - 1]));
            j -= 2;
        } else
            break;
    }
    
    if (j > i)
        maxSum = (maxSum + (arr[i] * arr[j]));
    else if (i == j)
        maxSum = (maxSum + arr[i]);
    
    return maxSum;
}

int main() {
    int arr[] = { -5, 2, 3, 7, -1, 1, -3, 12 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "The maximum sum of pairwise product in an array is " << calcSumPairProd(arr, n);
    return 0;
}
আউটপুট
The maximum sum of pairwise product in an array is 104
  1. C++-এ অ্যারেতে সর্বোচ্চ ট্রিপলেট যোগফল (Maximum Triplet Sum in Array)

  2. C++-এ অ্যারেতে সর্বোচ্চ ইকুইলিব্রিয়াম যোগফল

  3. C++-এ অ্যারেয়ের সর্বোচ্চ গড় যোগফল পার্টিশন

  4. অ্যারে অফ ইন্টিজার থেকে সর্বোচ্চ গুণফলের জোড়া খুঁজে বের করা C++-এ