কম্পিউটার

C++ প্রোগ্রামে অ্যারেতে একটি ট্রিপলেটের সর্বাধিক গুণ (আকার 3 এর পরবর্তী)।


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

সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

ইনপুট

arr[] = {9, 5, 2, 11, 7, 4}

আউটপুট

693

ব্যাখ্যা

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

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

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

পদ্ধতি 1

সরাসরি পদ্ধতি এই পদ্ধতিতে, আমরা সরাসরি অ্যারের মাধ্যমে লুপ করব এবং তারপর সম্ভাব্য সমস্ত ট্রিপলেট খুঁজে বের করব। প্রতিটি ট্রিপলেটের উপাদানগুলির গুণফল খুঁজে বের করুন এবং তাদের সবকটির সর্বাধিক প্রদান করুন৷

অ্যালগরিদম

শুরু করুন

maxProd = −1000

ধাপ 1 :

Create three nested loops:
Loop 1:i −> 0 to n−3
Loop 2: j −> i to n−2
Loop 3: k −> j to n−1

পদক্ষেপ 1.1৷ −

Find the product, prod = arr[i]*arr[j]*arr[k].

পদক্ষেপ 1.2৷ −

if prod > maxProd −> maxProd = prod.

ধাপ 3

return maxProd.

উদাহরণ

আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম,

#include <iostream>
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

পদ্ধতি 2

বাছাই ব্যবহার করে

এই পদ্ধতিতে, আমরা অ্যারেকে অবরোহী ক্রমে সাজাব। সাজানো অ্যারেতে, সর্বাধিক পণ্য ট্রিপলেট হবে,

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

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

অ্যালগরিদম

ধাপ 1

Sort the given array in descending order.

ধাপ 2

Find product of triples,
maxTriplet1 = arr[0]*arr[1]*arr[2]
maxTriplet2 = arr[0]*arr[n−1]*arr[n−2]

ধাপ 3

if( maxTriplet1 > maxTriplet2 ) −> return maxTriplet1

পদক্ষেপ 4৷ −

else −> return maxTriplet2.

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include <bits/stdc++.h>
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;
}

আউটপুট

অ্যারেতে ট্রিপলেটের সর্বোচ্চ গুণফল হল 693

পদ্ধতি 3

ট্রিপলেট মান খোঁজা।

আমরা এখন জানি যে সর্বাধিক পণ্য ট্রিপলেট হতে পারে দুটি ট্রিপলেটের যেকোনো একটি থেকে,

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

সুতরাং, আমরা অ্যারে অতিক্রম করে সরাসরি এই মানগুলি খুঁজে পেতে পারি, এবং তারপর মানগুলি ব্যবহার করে, আমরা সর্বাধিক পণ্য ট্রিপলেট খুঁজে পাব৷

অ্যালগরিদম

শুরু করুন

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

ধাপ 1

loop the array i −> 0 to n−1.

পদক্ষেপ 1.1

if(arr[i] > max) −> thirdMax = secMax, secMax = max, max
= arr[i]

পদক্ষেপ 1.2৷ −

elseif(arr[i] > secMax) −> thirdMax = secMax, secMax =
arr[i]

পদক্ষেপ 1.3৷ −

elseif(arr[i] > thirdMax) −> thirdMax = arr[i]

পদক্ষেপ 1.4৷ −

if(arr[i] < min) −> secMin = min, min = arr[i]

পদক্ষেপ 1.4৷ −

elseif(arr[i] < secMin) −> secMin = arr[i]

ধাপ 2

triplet1 = max * secMax * thridMax
triplet2 = max * min * secMin

ধাপ 3

if(triplet1 > triplet2) −> return triplet1

পদক্ষেপ 4৷ −

else −> return triplet2

উদাহরণ

আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম,

#include <iostream>
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++-এ অ্যারেতে সর্বোচ্চ ট্রিপলেট যোগফল

  2. C++ এ একটি অ্যারেতে সর্বোচ্চ ভারসাম্যের যোগফল

  3. একটি অ্যারের বিটোনিসিটি গণনা করার জন্য C++ প্রোগ্রাম

  4. একটি অ্যারেতে ইনভার্সন গণনা করার জন্য C++ প্রোগ্রাম