কম্পিউটার

C++ এ বর্গাকার বিন্যাসের সংখ্যা


ধরুন আমাদের কাছে ধনাত্মক পূর্ণসংখ্যার একটি অ্যারে A আছে, আমরা বলতে পারি যে অ্যারেটি বর্গপূর্ণ যদি প্রতিটি জোড়া সন্নিহিত উপাদানের জন্য, তাদের যোগফল একটি নিখুঁত বর্গ হয়। আমাদের A-এর পারমুটেশনের সংখ্যা বের করতে হবে যেগুলো বর্গপূর্ণ। দুটি পারমুটেশন A1 এবং A2 একই হবে না যদি এবং শুধুমাত্র যদি কিছু সূচক i থাকে যেমন A1[i] A2[i] এর মতো নয়।

সুতরাং, যদি ইনপুটটি [3,30,6] এর মত হয়, তাহলে আউটপুট হবে 2, যেহেতু আমাদের দুটি পারমুটেশন যেমন [3,6,30], [30,6,3]।

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   int count;
   bool isSqr(lli n){
      lli x = sqrt(n);
      return x * x == n;
   }
   void solve(vector<int>& a, int idx){
      if (idx == a.size()) {
         count++;
         return;
      }
      set<int> visited;
      for (int i = idx; i < a.size(); i++) {
         if ((idx == 0 || isSqr(a[idx - 1] + a[i])) &&
         !visited.count(a[i])) {
            swap(a[idx], a[i]);
            solve(a, idx + 1);
            swap(a[idx], a[i]);
            visited.insert(a[i]);
         }
      }
   }
   int numSquarefulPerms(vector<int>& a){
      count = 0;
      solve(a, 0);
      return count;
   }
};
main(){
   Solution ob;
   vector<int> v = {3,30,6};
   cout << (ob.numSquarefulPerms(v));
}

ইনপুট

{3,30,6}

আউটপুট

2

  1. কেন a[i] ==i[a] C/C++ অ্যারেতে?

  2. দুটি অ্যারে একই করতে অপারেশনের সংখ্যা গণনা করতে C++ কোড

  3. C++ এ মিতব্যয়ী নম্বর

  4. C++ পেন্টাটোপ নম্বর