সমস্যা বিবৃতি
আপনাকে 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