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

C++-এ নেগেটিভ সংখ্যা থাকা অ্যারেতে জোড়া বানিয়ে গুণফলের সর্বোচ্চ সম বের করার প্রোগ্রাম


সমস্যা বিবরণ

একটি অ্যারে (নেগেটিভ সংখ্যা থাকতে পারে) দেওয়া থাকলে, এলিমেন্টগুলো জোড়া বানিয়ে গুণফল নিন এবং তাদের সম সর্বোচ্চ করুন। অদ্দা এলিমেন্ট থাকলে সেটি সরাসরি যোগ করুন।

সমাধানের পদ্ধতি

  1. অ্যারে সর্ট করুন।
  2. নেগেটিভ সংখ্যাগুলো জোড়া বানান (সবচেয়ে ছোট দুটি নেগেটিভ গুণ করলে পজেটিভ হয়)۔
  3. পজেটিভ সংখ্যাগুলো জোড়া বানান (সবচেয়ে বড় দুটি গুণ করুন)۔
  4. যদি একটা নেগেটিভ ও একটা পজেটিভ বাকি থাকে, সেগুলো গুণ করুন।
  5. মডুলো 1000000007 নিন।

C++ কোড উদাহরণ

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

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

int main() {
    int arr[] = {-1, 9, 4, 5, -4, 7};
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << findSum(arr, n);
    return 0;
}

আউটপুট

87

ব্যাখ্যা

সর্টেড: [-4, -1, 4, 5, 7, 9]

নেগেটিভ জোড়া: (-4)×(-1) = 4

পজেটিভ জোড়া: 9×7 = 63, 5×4 = 20

মোট = 4 + 63 + 20 = 87

জটিলতা

  • সময়: O(n log n)
  • স্থান: O(1)
  1. C++-এ অ্যারেয়ের সর্বোচ্চ গড় যোগফল পার্টিশন

  2. C++-এ দেওয়া অপারেশন দিয়ে অ্যারে যোগফল সর্বাধিক করা

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

  4. C++-এ দেওয়া গুণফল দিয়ে N পূর্ণসংখ্যার সর্বোচ্চ GCD