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

সি++-এ যোগফল পূর্ণবর্গ হয় এমন পেয়ার গণনা

N উপাদানের একটি অ্যারে দেওয়া আছে। লক্ষ্য হল সব পেয়ার (Arr[i], Arr[j]) যাদের যোগফল পূর্ণবর্গ (perfect square) এবং i!=j। অর্থাৎ Arr[i]+Arr[j] পূর্ণবর্গ।

পেয়ারগুলোর যোগফল বের করে চেক করা হয় sqrt(Arr[i]+Arr[j]) - floor(sqrt(Arr[i]+Arr[j])) == 0।

উদাহরণ

ইনপুট: Arr[] = { 4,3,2,1,2,4 }, N=6

আউটপুট: যোগফল পূর্ণবর্গ হয় এমন পেয়ার: ২

ব্যাখ্যা: Arr[1]+Arr[3]=4, sqrt(4)-floor(4)=0 → ৪ পূর্ণবর্গ। Arr[2]+Arr[4]=4, sqrt(4)-floor(4)=0 → ৪ পূর্ণবর্গ। বাকি পেয়ারগুলোর যোগফল ৭,৬,৫,৮ যা পূর্ণবর্গ নয়।

ইনপুট: Arr[] = { 3,3,3,3,3 }, N=5

আউটপুট: যোগফল পূর্ণবর্গ হয় এমন পেয়ার: ০

ব্যাখ্যা: সব পেয়ারের যোগফল ৬, যা পূর্ণবর্গ নয়।

অ্যাপ্রোচ

  • ইন্টিজার অ্যারে Arr[] নেওয়া হয়।
  • n ভেরিয়েবলে দৈর্ঘ্য।
  • countPairs(int arr[], int n) ফাংশন অ্যারে এবং দৈর্ঘ্য গ্রহণ করে যোগফল পূর্ণবর্গ হয় এমন পেয়ার রিটার্ন করে।
  • দুটি নেস্টেড for লুপ: আউটার 0<=i
  • sum = arr[i]+arr[j]। sqr = sqrt(sum)। sqr - floor(sqr) == 0 হলে count বাড়ানো হয়।

উদাহরণ কোড

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

int countPairs(int arr[], int n) {
    int count = 0;
    int sum = 0;
    double sqr = 0;
    for (int i = 0; i < n-1; i++) {
        for (int j = i+1; j < n; j++) {
            sum = arr[i] + arr[j];
            sqr = sqrt(sum);
            if (sqr - floor(sqr) == 0) {
                count++;
            }
        }
    }
    return count;
}

int main() {
    int arr[] = { 1, 2, 4, 8, 5, 6 };
    int n = sizeof(arr) / sizeof(int);
    cout << endl << "Pairs whose sum is perfect square :" << countPairs(arr, n);
    return 0;
}

আউটপুট

Pairs whose sum is perfect square : 2
  1. অ্যারেতে সব জোড়ার যোগফলের XOR-এর যোগফল C++-তে

  2. বাইনারি ট্রিতে জোড়া গণনা যাদের যোগফল x C++-এ

  3. বাইনারি ট্রিতে পারফেক্ট স্কয়ার ওজন বিশিষ্ট নোড গণনা C++-এ

  4. C++-এ দুটি BST-র নোড জোড়া যাদের যোগফল x গণনা