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

অ্যারেতে ট্রিপলেট (আকার ৩ এর সাবসিকোয়েন্স) এর সর্বোচ্চ গুণফল (C++ প্রোগ্রাম)

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

উদাহরণ ইনপুট
arr[] = {9, 5, 2, 11, 7, 4}
আউটপুট
693
ব্যাখ্যা

এখানে, আমরা অ্যারেতে সব উপাদান থেকে সর্বোচ্চ গুণফল দেয় এমন ট্রিপলেট খুঁজে বের করব। maxProd = 9 * 11 * 7 = 693

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

এই সমস্যার একাধিক সমাধান হতে পারে। আমরা এখানে সেগুলো আলোচনা করব।

পদ্ধতি ১: সরাসরি পদ্ধতি

এই পদ্ধতিতে, আমরা সরাসরি অ্যারে লুপ চালিয়ে সব সম্ভাব্য ট্রিপলেট বের করব। প্রতিটি ট্রিপলেটের উপাদানগুলোর গুণফল বের করে সবচেয়ে বড় গুণফল ফেরত দিব।

অ্যালগরিদম

আরম্ভিকরণ:

maxProd = -1000

ধাপ ১: তিনটি নেস্টেড লুপ তৈরি করুন: Loop 1: i → 0 থেকে n-3 Loop 2: j → i থেকে n-2 Loop 3: k → j থেকে n-1

ধাপ ১.১: গুণফল বের করুন, prod = arr[i]*arr[j]*arr[k]。

ধাপ ১.২: if prod > maxProd → maxProd = prod।

ধাপ ৩: maxProd ফেরত দিন।

C++ প্রোগ্রাম উদাহরণ (পদ্ধতি ১)
#include 
using namespace std;

int calcMaxProd(int arr[], int n) {
    int maxProd = -1000;
    int prod;
    for (int i = 0; i < n - 2; i++)
        for (int j = i + 1; j < n - 1; j++)
            for (int k = j + 1; k < n; k++) {
                prod = arr[i] * arr[j] * arr[k];
                if (maxProd < prod)
                    maxProd = prod;
            }
    return maxProd;
}

int main() {
    int arr[] = { 9, 5, 2, 11, 7, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum product of a triplet in array is " << calcMaxProd(arr, n);
    return 0;
}
আউটপুট
Maximum product of a triplet in array is 693
পদ্ধতি ২: সর্টিং ব্যবহার করে

এই পদ্ধতিতে, আমরা অ্যারেটি নিম্নক্রমে সর্ট করব। সর্ট করা অ্যারেতে সর্বোচ্চ গুণফল ট্রিপলেট থাকবে:

(arr[0], arr[1], arr[2])
(arr[0], arr[n-1], arr[n-2])

আমরা এই দুটি ট্রিপলেটের গুণফলের মধ্যে সর্বোচ্চটি ফেরত দিব।

অ্যালগরিদম

ধাপ ১: দেওয়া অ্যারেটি নিম্নক্রমে সর্ট করুন।

ধাপ ২: ট্রিপলেটের গুণফল বের করুন: maxTriplet1 = arr[0]*arr[1]*arr[2] maxTriplet2 = arr[0]*arr[n-1]*arr[n-2]

ধাপ ৩: if(maxTriplet1 > maxTriplet2) → return maxTriplet1

ধাপ ৪: else → return maxTriplet2।

C++ প্রোগ্রাম উদাহরণ (পদ্ধতি ২)
#include 
using namespace std;

int calcMaxProd(int arr[], int n) {
    sort(arr, arr + n, greater<>());
    int maxTriplet1 = arr[0] * arr[1] * arr[2];
    int maxTriplet2 = arr[0] * arr[n - 1] * arr[n - 2];
    if (maxTriplet1 > maxTriplet2)
        return maxTriplet1;
    return maxTriplet2;
}

int main() {
    int arr[] = { 9, 5, 2, 11, 7, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum product of a triplet in array is " << calcMaxProd(arr, n);
    return 0;
}
আউটপুট
Maximum product of a triplet in array is 693
পদ্ধতি ৩: ট্রিপলেট মান খুঁজে বের করে

যেহেতু আমরা জানি সর্বোচ্চ গুণফল ট্রিপলেট নিচের দুটির যেকোনো একটিতে হতে পারে:

(maximum, second_max, third_max)
(maximum, minimum, second_min)

তাই আমরা সরাসরি অ্যারে ট্রভার্স করে এই মানগুলো বের করতে পারি এবং সেগুলো ব্যবহার করে সর্বোচ্চ গুণফল ট্রিপলেট বের করতে পারি।

অ্যালগরিদম

আরম্ভিকরণ:

max = -1000, secMax = -1000, thirdMax = -1000
min = 10000, secMin = 10000

ধাপ ১: অ্যারে লুপ করুন i → 0 থেকে n-1।

ধাপ ১.১: if(arr[i] > max) → thirdMax = secMax, secMax = max, max = arr[i]

ধাপ ১.২: else if(arr[i] > secMax) → thirdMax = secMax, secMax = arr[i]

ধাপ ১.৩: else if(arr[i] > thirdMax) → thirdMax = arr[i]

ধাপ ১.৪: if(arr[i] < min) → secMin = min, min = arr[i]

ধাপ ১.৫: else if(arr[i] < secMin) → secMin = arr[i]

ধাপ ২: triplet1 = max * secMax * thirdMax, triplet2 = max * min * secMin

ধাপ ৩: if(triplet1 > triplet2) → return triplet1

ধাপ ৪: else → return triplet2

C++ প্রোগ্রাম উদাহরণ (পদ্ধতি ৩)
#include 
using namespace std;

int calcMaxProd(int arr[], int n) {
    int max = -1000, secMax = -1000, thirdMax = -1000;
    int min = 1000, secMin = 1000;
    
    for (int i = 0; i < n; i++) {
        if (arr[i] > max) {
            thirdMax = secMax;
            secMax = max;
            max = arr[i];
        } else if (arr[i] > secMax) {
            thirdMax = secMax;
            secMax = arr[i];
        } else if (arr[i] > thirdMax)
            thirdMax = arr[i];
        
        if (arr[i] < min) {
            secMin = min;
            min = arr[i];
        } else if (arr[i] < secMin)
            secMin = arr[i];
    }
    
    int triplet1 = max * secMax * thirdMax;
    int triplet2 = max * secMin * min;
    if (triplet1 > triplet2)
        return triplet1;
    return triplet2;
}

int main() {
    int arr[] = { 9, 5, 2, 11, 7, 4 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Maximum product of a triplet in array is " << calcMaxProd(arr, n);
    return 0;
}
আউটপুট
Maximum product of a triplet in array is 693
  1. C++-এ অ্যারেতে সর্বোচ্চ ট্রিপলেট যোগফল (Maximum Triplet Sum in Array)

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

  3. C++ প্রোগ্রাম: অ্যারের বাইটোনিসিটি ক্যালকুলেট করা

  4. C++ প্রোগ্রাম: অ্যারেতে ইনভার্শন কাউন্ট করা