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

C++-এ অ্যারেতে যেসব স্বতন্ত্র জোড়ার যোগফল অ্যারেতেই আছে তাদের গণনা

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

মনে রাখার বিষয়গুলি

  • একই উপাদান নিয়ে জোড়া একবারই গণনা হবে তাদের ক্রম নির্বিশেষে। উদাহরণস্বরূপ, (3,2) এবং (2,3) একই হিসেবে গণ্য হবে।
  • যদি কোনো সংখ্যা অ্যারেতে একাধিকবার থাকে তবে সেটি জোড়া তৈরি করতে ঠিক দুইবার বিবেচিত হবে। উদাহরণস্বরূপ, যদি অ্যারেতে উপাদান থাকে {2, 2, 2, 2} তবে জোড়া হবে (2,2) এবং এটিকে ১বার গণ্য হবে।

উদাহরণ

ইনপুট − int arr = {6, 4, 10, 14} আউটপুট − গণনা 2

ব্যাখ্যা − অ্যারেতে যোগফল সহ জোড়াগুলো হল (6,4) এবং (10,4), তাই গণনা 2।

ইনপুট − int arr = {6, 6, 6, 6, 6, 13} আউটপুট − গণনা 0

ব্যাখ্যা − একই অ্যারেতে যোগফল সহ কোনো জোড়া নেই। তাই গণনা 0।

প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • একটি অ্যারে তৈরি করুন, যেমন arr[]
  • length() ফাংশন দিয়ে অ্যারের দৈর্ঘ্য গণনা করুন
  • একটি অস্থায়ী ভেরিয়েবল নিন যা উপাদানগুলির গণনা সংরক্ষণ করবে
  • একটি map টাইপ ভেরিয়েবল তৈরি করুন, যেমন mp
  • i = 0 থেকে i < size পর্যন্ত লুপ শুরু করুন
  • জোড়াগুলোর জন্য আরেকটি map তৈরি করুন, যেমন par
  • আরেকটি লুপ i = 0 থেকে i < size পর্যন্ত শুরু করুন
  • লুপের ভিতরে j = i+1 থেকে j < size পর্যন্ত অন্য একটি লুপ শুরু করুন
  • যদি mp[arr[i]+arr[j]] > 0 এবং pr[{arr[i], arr[j]}] == 0 হয় তবে count 1 বৃদ্ধি করুন
  • par[{ arr[i], arr[j] }] 1 বৃদ্ধি করুন
  • par[{ arr[j], arr[i] }] 1 বৃদ্ধি করুন
  • count ফেরত দিন
  • ফলাফল প্রিন্ট করুন

উদাহরণ কোড

#include <iostream>
#include <map>
using namespace std;

// ar[0..n-1]-এ 'sum' যোগফল वाले জোড়ার সংখ্যা ফেরত দেয়
int countpairs(int ar[], int n) {
    // ম্যাপে সব উপাদানের ফ্রিকোয়েন্সি সংরক্ষণ করুন
    // যাতে জোড়া (ar[i], sum-ar[i]) খুঁজে পাওয়া যায়
    // কারণ (ar[i]) + (sum - ar[i]) = sum
    map<int, int> mymap;
    for (int i = 0; i < n; i++) {
        mymap[ar[i]]++;
    }
    
    // ডুপ্লিকেট এড়াতে result map ব্যবহার করুন
    map<pair<int, int>, int> p;
    int result = 0;
    
    // সব জোড়া বিবেচনা করুন
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            // যদি বর্তমান জোড়ার যোগফল বিদ্যমান থাকে
            if (mymap[ar[i] + ar[j]] > 0 && p[{ ar[i], ar[j] }] == 0) {
                result++;
            }
            // বর্তমান জোড়া উভয় পথে ইনসার্ট করুন ডুপ্লিকেট এড়াতে
            p[{ ar[i], ar[j] }]++;
            p[{ ar[j], ar[i] }]++;
        }
    }
    return result;
}

// main ফাংশন
int main() {
    int ar[] = { 6, 4, 10, 14 };
    int n = sizeof(ar) / sizeof(ar[0]);
    cout << "count is " << countpairs(ar, n);
    return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি রান করি তবে নিচের আউটপুট পাব −

count is 2
  1. ফিবোনাচ্চি সংখ্যা যেন করা নোডের ওজন এবং X-এর যোগফল C++-এ

  2. C++-তে অ্যারে থেকে K দিয়ে বিভাজ্য যোগফল वाले সর্বোচ্চ জোড়া বের করা

  3. C++-তে অ্যারেতে K দিয়ে বিভাজ্য সব এলিমেন্টের গুণফল বের করা

  4. C++-এ অ্যারেতে ভাগযোগ্য জোড়া গণনা