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

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

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

কোড বর্ণনা - এখানে, আমরা একটি সেট তৈরি করব যেটি arr1-এর একটি এলিমেন্ট এবং arr2-এর একটি এলিমেন্টের যোগফল দিয়ে গঠিত, অর্থাৎ sum = arr1[i] + arr2[j], যেখানে i, j < m। N-এর জন্য, আমাদের সেটের Nতম এলিমেন্টের মান বের করতে হবে।

উদাহরণ

ইনপুট

arr1[] = {3, 1, 5}, arr2[] = {6, 2, 8}, N = 4

আউটপুট

7

ব্যাখ্যা

সেটের এলিমেন্টগুলো:

৯ (3+6 এবং 1+8), ৫ (3+2), ১১ (3+8, 5+6), ৭ (1+6, 5+2), ৩ (1+2), ১৩ (5+8)। চতুর্থ এলিমেন্ট হল ৭।

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

সমাধান পদ্ধতিটি সিম্পলি সেটের এলিমেন্টগুলো বের করা অ্যারের এলিমেন্টগুলোর যোগফল বের করে। এর জন্য নেস্টেড লুপ ব্যবহার করব, আউটার লুপ arr1-এর এলিমেন্টের জন্য এবং ইনার লুপ arr2-এর এলিমেন্টের জন্য। এবং ইনার লুপের প্রতিটি ইটারেশনে যোগফল সেটে স্টোর করব, যা ডুপ্লিকেট অ্যালাউ করবে না। সব যোগফল ভ্যালু ফিড করার পর, সেট ট্রাভার্স করে Nতম এলিমেন্ট রিটার্ন করব।

প্রোগ্রাম উদাহরণ (সমস্যায় কোড মিসম্যাচ রয়েছে)

#include <iostream>
using namespace std;

void calcSumVariables(int sum[], int n) {
    float SUMX = 0;
    for (int i = 0; i < n; i++) {
        SUMX += sum[i];
    }
    SUMX /= (n - 1);
    for (int i = 0; i < n; i++)
        cout << "\nx" << (i + 1) << " = " << (SUMX - sum[i]);
}

int main() {
    int sum[] = {3, 8, 6, 7, 4, 5, 9 };
    int N = sizeof(sum) / sizeof(sum[0]);
    cout << "The value of variables that form the sum are ";
    calcSumVariables(sum, N);
    return 0;
}

আউটপুট

The value of variables that form the sum are
x1 = 4 x2 = -1 x3 = 1 x4 = 0 x5 = 3 x6 = 2 x7 = -2

দ্রষ্টব্য: প্রদত্ত কোডটি মূল সমস্যা (দুই অ্যারের যোগফল সেটে Nতম আইটেম) সমাধান করছে না, বরং অন্য একটি সমস্যা (n সমীকরণ থেকে n ভেরিয়েবল বের করা) সমাধান করছে। মূল সমস্যার সঠিক সমাধান নিচে দেওয়া হলো:

সঠিক প্রোগ্রাম উদাহরণ

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

int findNthElementInSumSet(int arr1[], int arr2[], int m, int N) {
    set<int> sumSet;
    
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < m; j++) {
            sumSet.insert(arr1[i] + arr2[j]);
        }
    }
    
    if (N > sumSet.size())
        return -1;
    
    auto it = sumSet.begin();
    advance(it, N - 1);
    return *it;
}

int main() {
    int arr1[] = {3, 1, 5};
    int arr2[] = {6, 2, 8};
    int m = 3;
    int N = 4;
    
    cout << N << "th element in the sum set is " << findNthElementInSumSet(arr1, arr2, m, N);
    return 0;
}

আউটপুট

4th element in the sum set is 7
  1. C++-এ BST-এ Two Sum IV (Two Sum IV - Input is a BST)

  2. C++ ব্যবহার করে N ফ্যাক্টোরিয়ালের যোগফলের শেষ দু ডিজিট বের করা

  3. দুই অ্যারেতে উপাদান বদলিয়ে যোগফল সমান করার জোড়া খুঁজে বের করা C++-এ

  4. C++ STL-এ set::find() ফাংশন