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

C++-এ সমীকরণ সন্তুষ্ট করে সেক্সটুপলেট সংখ্যা বের করুন


এই আর্টিকেলে আমরা একটি সমীকরণ সন্তুষ্ট করে সেক্সটুপলেট (৬-টাপল) সংখ্যা বের করার পদ্ধতি বর্ণনা করব। আমরা নিচের সমীকরণটি উদাহরণ হিসেবে নিচ্ছি যেখানে a, b, c, d, e, f-এর মান বের করতে হবে যাতে সমীকরণটি সন্তুষ্ট হয়।

( a + b + c ) * e / d = f

সমীকরণটি পুনর্বিন্যাস করলে:

( a + b + c ) = ( f * d ) / e

সমস্যার সহজ উদাহরণ:

ইনপুট : arr [ ] = { 1, 3 }
আউটপুট : 4
ব্যাখ্যা : ( a, b, c, e, f ) = 1, d = 3
   ( a, b, c, d, e ) = 1, f = 3
   ( a, b, c ) = 1, ( d, e, f ) = 3
   ( a, b, c, d, f ) = 3, ( e ) = 1
ইনপুট : arr [ ] = { 2, 5 }
আউটপুট : 3

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

সমাধান বের করার জন্য আমরা নেইভ (Naive) পদ্ধতি ব্যবহার করব।

নেইভ পদ্ধতি (Naive Approach)

এই সমস্যায় LHS এবং RHS দেখে আমরা LHS-র সকল সম্ভাব্য ফলাফল বের করে একটি অ্যারেতে রাখব, একইভাবে RHS-র সকল সম্ভাব্য ফলাফল দিয়ে আরেকটি অ্যারে বানাব। তারপর দুটি অ্যারে চেক করব একই মানগুলো জন্য এবং প্রতিটি মিল পাওয়ার জন্য কাউন্ট বাড়াব, অবশেষে ফলাফল দেখাব।

উদাহরণ

#include<bits/stdc++.h> using namespace std; int findsamenumbers(int *arr1, int *arr2, int n){     int i = 0, j = 0, k = 0, count=0;     while(( i < n*n*n+1) && (j < n*n*n+1)){         if(arr1[i] < arr2[j])             i++;         else if(arr1[i] == arr2[j]){             count++;         int temp = arr1[i];         while(temp==arr1[++i]){             count++;         }         while(temp==arr2[++j]){             count++;         }     }     else         j++;     }       return count; } int main(){     int arr[] = {2,5};     int n = sizeof(arr)/sizeof(arr[0]);     // LHS অ্যারের সকল সম্ভাব্য মান জেনারেট     int index = 0,i;     int LHS[n*n*n ];     for ( i = 0; i < n; i++){         for (int j = 0; j < n; j++){             for(int k = 0; k < n; k++){                 LHS[index++] = (arr[i] * arr[j]) / arr[k];             }         }     }     // RHS অ্যারের সকল সম্ভাব্য মান জেনারেট     int RHS[n*n*n ];     index=0;     for (int i = 0; i < n; i++){         for (int j = 0; j < n; j++){             for (int k = 0; k < n; k++){                 RHS[index++] = (arr[i] + arr[j] + arr[k]);             }         }     }     sort(RHS, RHS + (n*n*n));     sort(LHS, LHS + (n*n*n));     int result = findsamenumbers(LHS, RHS, n);     cout<<"Number of sextuplets that satisfy an equation: "<<result;     return 0; }

আউটপুট

Number of sextuplets that satisfy an equation: 3

উপরোক্ত প্রোগ্রামের ব্যাখ্যা

এই প্রোগ্রামে আমরা LHS এবং RHS-র প্রতিটি ফলাফল রাখার জন্য দুটি অ্যারে বানাই। তিনটি নেস্টেড লুপ ব্যবহার করে (a, b, c)-এর সকল সম্ভাব্য মান LHS-এ এবং (d, e, f)-এর সকল সম্ভাব্য মান RHS-এ রাখি। এরপর দুটি অ্যারে সর্ট করি যাতে তুলনা করা যায় এবং একই মান খুঁজে বের করতে `findsamenumber()` ফাংশনে পাস করি।

`findsamenumber()` ফাংশনে দুটি নেস্টেড লুপ ব্যবহার করে একই মান খুঁজি। যখন দুটি এলিমেন্ট একই পাই, তবে উভয় অ্যারেতে সেই সংখ্যার ফ্রিকোয়েন্সি চেক করি যাতে প্রতিটি সম্ভাব্য মান কাউন্ট হয়।

if(arr1[i] == arr2[j]){    count++;    int temp = arr1[i];    while(temp==arr1[++i]){       count++;    }    while(temp==arr2[++j]){       count++;    }

উপসংহার

এই আর্টিকেলে আমরা সমীকরণ (a + b + c) * e / d = f সন্তুষ্ট করে সেক্সটুপলেট সংখ্যা বের করেছি যেখানে দেওয়া অ্যারেতে ৬টি ভেরিয়েবলের সকল সম্ভাব্য মান খুঁজে বের করা হয়েছে। এই সমস্যাটি C, Java, Python বা অন্য প্রোগ্রামিং ভাষায়ও সমাধান করা যায়।


  1. C++ ব্যবহার করে পেন্টাগোনাল পিরামিডাল সংখ্যা নির্ণয় করুন

  2. C++ দিয়ে একটি স্ট্রিংয়ের সাবস্ট্রিং-এর সংখ্যা বের করা

  3. C++-এ বিটওয়াইজ OR >= K वाले সাবঅ্যারে সংখ্যা খুঁজুন

  4. C++-এ ট্রেন স্টপেজ স্টেশন সংখ্যা বের করুন