সমস্যা বিবৃতি
আপনাকে n পূর্ণসংখ্যা এবং একটি পূর্ণসংখ্যা K এর একটি অ্যারে দেওয়া হয়েছে। মোট অক্রমবিহীন জোড়ার সংখ্যা খুঁজে বের করুন {i, j} যেমন |ai + aj – k| এর পরম মান। ন্যূনতম সম্ভব যেখানে i !=j.
উদাহরণ
যদি arr[ ] ={0, 4, 6, 2, 4} এবং k =7 হয় তবে আমরা 1 হিসাবে ন্যূনতম মান সহ নিম্নলিখিত 5 জোড়া তৈরি করতে পারি
{0, 6}, {4, 2}, {4, 4}, {6, 2}, {2, 4}
অ্যালগরিদম
সমস্ত সম্ভাব্য জোড়ার উপর পুনরাবৃত্তি করুন এবং প্রতিটি জোড়ার জন্য আমরা পরীক্ষা করব যে (ai + aj – K) এর মান আমাদের বর্তমান ক্ষুদ্রতম মানের নট থেকে ছোট কিনা। সুতরাং উপরের অবস্থার ফলাফল অনুসারে আমাদের মোট তিনটি ক্ষেত্রে রয়েছে -
- abs( ai + aj – K)> সবচেয়ে ছোট − কিছুই করবেন না কারণ এই জোড়াটি ন্যূনতম সম্ভাব্য মানের মধ্যে গণনা করা হবে না।
- abs(ai + aj – K) =ক্ষুদ্রতম − জোড়ার সংখ্যা বৃদ্ধি করে যার ফলে ন্যূনতম সম্ভাব্য মান।
- abs( ai + aj – K) <ক্ষুদ্রতম − ক্ষুদ্রতম মান আপডেট করুন এবং গণনা 1 এ সেট করুন।
উদাহরণ
#include <iostream> #include <climits> #include <cmath> using namespace std; void getPairs(int *arr, int n, int k) { int minValue = INT_MAX; int pairs = 0; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { int val = abs(arr[i] + arr[j] - k); if (val < minValue) { minValue = val; pairs = 1; } else if (val == minValue) { ++pairs; } } } cout << "Min value = " << minValue << endl; cout << "Total pairs = " << pairs << endl; } int main() { int arr[] = {0, 4, 6, 2, 4}; int k = 7; int n = sizeof(arr) / sizeof(arr[0]); getPairs(arr, n, k); return 0; }
আউটপুট
আপনি যখন উপরের প্রোগ্রামটি কম্পাইল এবং এক্সিকিউট করবেন। এটি নিম্নলিখিত আউটপুট −
তৈরি করেMin value= 1 Total pairs = 5