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

অ্যারেতে যেগুলোর যোগফল অ্যারেতেই বিদ্যমান এমন যুগল খুঁজে বের করা C++-এ

এই সমস্যায়, আমাদের N সংখ্যক পূর্ণসংখ্যা সম্বলিত একটি অ্যারে arr[] দেওয়া আছে। আমাদের কাজ হল অ্যারেতে এমন যুগল খুঁজে বের করা যাদের যোগফল অ্যারেতেই একটি মান হিসেবে বিদ্যমান।

উদাহরণ

ইনপুট

arr[] = {1, 2, 4, 6, 7}

আউটপুট

(1, 6), (2, 4)

ব্যাখ্যা

(1, 6) যুগলের জন্য, মানগুলোর যোগফল ৭ যা অ্যারেতে আছে।

(2, 4) যুগলের জন্য, মানগুলোর যোগফল ৬ যা অ্যারেতে আছে।

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

এই সমস্যার একটি সহজ সমাধান হল অ্যারের এলিমেন্ট ব্যবহার করে সম্ভাব্য সব যুগল বের করা। তারপর প্রতিটি যুগলের যোগফল ক্যালকুলেট করা। সেই যোগফল মানটি অ্যারেতে সার্চ করা, যদি পাওয়া যায় তবে প্রিন্ট করা।

আমরা যুগল সংখ্যা গণনা করার জন্য একটি কাউন্টার রাখব। এবং যদি কাউন্ট ০ হয়, তবে "No Such Pairs found!" প্রিন্ট করব।

প্রোগ্রাম উদাহরণ (সহজ পদ্ধতি)

#include <iostream>
using namespace std;

void findSumPairsArr(int arr[], int n){
    int pairCount = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            for (int k = 0; k < n; k++) {
                if (arr[i] + arr[j] == arr[k]) {
                    cout << "( " << arr[i] << ", " << arr[j] << " ), sum = " << (arr[i] + arr[j]) << "\n";
                    pairCount++;
                }
            }
        }
    }
    if (!pairCount)
        cout << "No Such Pairs found!";
}

int main() {
    int arr[] = { 1, 2, 4, 6, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Pairs in array whose sum already exists in array : \n";
    findSumPairsArr(arr, n);
    return 0;
}

আউটপুট

Pairs in array whose sum already exists in array -
( 1, 6 ), sum = 7
( 2, 4 ), sum = 6

একটি আরও কার্যকর পদ্ধতি হল হ্যাশ টেবিল ব্যবহার করে সমস্যাটি সমাধান করা। আমরা সব যুগল চেক করব এবং তাদের যোগফল ক্যালকুলেট করে হ্যাশ টেবিলে সেটি বিদ্যমান কিনা চেক করব। যদি pairCount ০ হয়, তবে "No Such Pairs found!" প্রিন্ট করব।

এখানে, C++-এ হ্যাশ টেবিলের ইমপ্লিমেন্টেশন unordered_set ব্যবহার করে করা হয়েছে।

প্রোগ্রাম উদাহরণ (হ্যাশ টেবিল পদ্ধতি)

#include <bits/stdc++.h>
using namespace std;

void findSumPairsArr(int arr[], int n) {
    unordered_set<int> HT;
    for (int i = 0; i < n; i++)
        HT.insert(arr[i]);
    
    int pairCount = 0;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            if (HT.find(arr[i] + arr[j]) != HT.end()) {
                cout << "( " << arr[i] << ", " << arr[j] << " ), sum = " << (arr[i] + arr[j]) << "\n";
                pairCount++;
            }
        }
    }
    if (!pairCount)
        cout << "No Such Pairs found!";
}

int main() {
    int arr[] = {1, 2, 4, 6, 7 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << "Pairs in array whose sum already exists in array : \n";
    findSumPairsArr(arr, n);
    return 0;
}

আউটপুট

Pairs in array whose sum already exists in array -
( 1, 6 ), sum = 7
( 2, 4 ), sum = 6
  1. অ্যারেতে a+b+c=d হওয়া সর্বোচ্চ d বের করা (C++)

  2. অ্যারেতে লোকাল মিনিমা খুঁজে বের করা (C++)

  3. C++ ব্যবহার করে অ্যারেতে সমস্ত ভিন্ন সাবসেট (সাবসিকোয়েন্স) যোগফল খুঁজে বের করা

  4. C++ ব্যবহার করে অ্যারেতে ab = cd সেটি করার সব জোড়া (a,b) ও (c,d) বের করা