Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

उत्पाद वाले सभी उप-अनुक्रमों की गणना करें <=के - सी ++ में रिकर्सिव दृष्टिकोण

इस ट्यूटोरियल में, हम उत्पाद वाले उप-अनुक्रमों की संख्या ज्ञात करने के लिए एक प्रोग्राम पर चर्चा करेंगे <=k.

इसके लिए हमें एक सरणी और एक मान K प्रदान किया जाएगा। हमारा कार्य K के रूप में उनके उत्पाद वाले उप अनुक्रमों की संख्या ज्ञात करना है।

उदाहरण

#include <bits/stdc++.h>
#define ll long long
using namespace std;
//keeping count of discarded sub sequences
ll discard_count = 0;
ll power(ll a, ll n){
   if (n == 0)
      return 1;
   ll p = power(a, n / 2);
   p = p * p;
   if (n & 1)
      p = p * a;
   return p;
}
//recursive approach to count
//discarded sub sequences
void solve(int i, int n, float sum, float k,
float* a, float* prefix){
   if (sum > k) {
      discard_count += power(2, n - i);
      return;
   }
   if (i == n)
      return;
      float rem = prefix[n - 1] - prefix[i];
   if (sum + a[i] + rem > k)
      solve(i + 1, n, sum + a[i], k, a, prefix);
   if (sum + rem > k)
      solve(i + 1, n, sum, k, a, prefix);
}
int countSubsequences(const int* arr,
int n, ll K){
   float sum = 0.0;
   float k = log2(K);
   float prefix[n], a[n];
   for (int i = 0; i < n; i++) {
      a[i] = log2(arr[i]);
      sum += a[i];
   }
   prefix[0] = a[0];
   for (int i = 1; i < n; i++) {
      prefix[i] = prefix[i - 1] + a[i];
   }
   ll total = power(2, n) - 1;
   if (sum <= k) {
      return total;
   }
   solve(0, n, 0.0, k, a, prefix);
   return total - discard_count;
}
int main() {
   int arr[] = { 4, 8, 7, 2 };
   int n = sizeof(arr) / sizeof(arr[0]);
   ll k = 50;
   cout << countSubsequences(arr, n, k);
   return 0;
}

आउटपुट

9

  1. C++ में किसी सरणी में सभी अभाज्य संख्याओं का गुणनफल

    कुछ तत्वों के साथ एक पूर्णांक सरणी arr[] को देखते हुए, कार्य उस संख्याओं की सभी अभाज्य संख्याओं का गुणनफल खोजना है। अभाज्य संख्याएँ वे संख्याएँ होती हैं जिन्हें या तो 1 से या स्वयं संख्या से विभाजित किया जाता है, या एक अभाज्य संख्या एक ऐसी संख्या होती है जो 1 और स्वयं संख्या को छोड़कर किसी अन्य संख

  1. सी ++ में एक सरणी में सभी जोड़ीदार लगातार तत्वों का उत्पाद

    n पूर्णांकों की एक सरणी गिरफ्तारी [n] को देखते हुए, कार्य सभी जोड़ीदार क्रमागत तत्वों के गुणनफल को खोजना है। एक सरणी arr[] में लगातार तत्व हैं, यदि हम ith तत्व पर हैं, अर्थात arr[i] तो इसका क्रमागत तत्व या तो arr[i+1] या arr[i-1] होगा, इसलिए उत्पाद arr होगा[ i] * arr[i+1] या arr[i] * arr[i-1]. इनप

  1. C++ में एक बाइनरी ट्री में सभी नोड्स का उत्पाद

    नोड्स वाले बाइनरी ट्री के साथ दिया गया है और कार्य किसी दिए गए बाइनरी ट्री के सभी नोड्स के उत्पाद को खोजना है। बाइनरी ट्री में एक रूट नोड होता है जो एक ट्री के सभी नोड्स का मास्टर नोड होता है। एक नोड में डेटा पार्ट, लेफ्ट पॉइंटर होता है जो आगे लेफ्ट सबडायरेक्टरी और राइट पॉइंटर बनाएगा जो राइट सबडायर