এই আর্টিকেলে আমরা একটি সমীকরণ সন্তুষ্ট করে সেক্সটুপলেট (৬-টাপল) সংখ্যা বের করার পদ্ধতি বর্ণনা করব। আমরা নিচের সমীকরণটি উদাহরণ হিসেবে নিচ্ছি যেখানে 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 বা অন্য প্রোগ্রামিং ভাষায়ও সমাধান করা যায়।