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

एक सरणी में जोड़े (x, y) की संख्या पाएं जैसे कि x^y> y^x C++ . में

मान लीजिए कि हमारे पास धनात्मक पूर्णांकों के दो सरणियाँ X और Y हैं। ऐसे युग्मों की संख्या ज्ञात कीजिए कि x^y> y^x, जहाँ x, X का एक अवयव है और y, Y का एक अवयव है। मान लीजिए X =[2, 1, 6], और Y =[1, 5] , तो आउटपुट 3 होगा। चूंकि तीन जोड़े हैं, ये हैं (2, 1), (2, 5) और (6, 1)

हम इसे एक कुशल तरीके से हल कर सकते हैं। तर्क सरल है, यह तब होगा जब y> x फिर x^y> y^x कुछ अपवादों के साथ। तो यह है ट्रिक।

  • सरणी Y को क्रमबद्ध करें

  • X में प्रत्येक अवयव x के लिए, हमें Y में x से बड़ी सबसे छोटी संख्या का सूचकांक ज्ञात करना होगा। ऐसा करने के लिए हम बाइनरी खोज का उपयोग करेंगे। अन्यथा हम अपर_बाउंड () फ़ंक्शन का भी उपयोग कर सकते हैं।

  • पाए गए इंडेक्स के बाद की सभी संख्याएं संबंध को संतुष्ट करती हैं, इसलिए बस उसे गिनती में जोड़ें।

उदाहरण

#include <iostream>
#include <algorithm>
using namespace std;
int count(int x, int Y[], int n, int no_of_y[]) {
   if (x == 0)
      return 0;  
   if (x == 1)
   return no_of_y[0];
   int* index = upper_bound(Y, Y + n, x);
   int ans = (Y + n) - index;
   ans += (no_of_y[0] + no_of_y[1]);
   if (x == 2)
      ans -= (no_of_y[3] + no_of_y[4]);
   if (x == 3)
      ans += no_of_y[2];
   return ans;
}
int howManyPairs(int X[], int Y[], int m, int n) {
   int no_of_y[5] = {0};
   for (int i = 0; i < n; i++)
      if (Y[i] < 5)
         no_of_y[Y[i]]++;
   sort(Y, Y + n);
   int total_pairs = 0;
   for (int i=0; i< m; i++)
      total_pairs += count(X[i], Y, n, no_of_y);
   return total_pairs;
}
int main() {
   int X[] = {2, 1, 6};
   int Y[] = {1, 5};
   int m = sizeof(X)/sizeof(X[0]);
   int n = sizeof(Y)/sizeof(Y[0]);
   cout << "Total pair count: " << howManyPairs(X, Y, m, n);
}

आउटपुट

Total pair count: 3

  1. सी ++ में लंबाई एल की स्ट्रिंग के जादुई जोड़े की संख्या पाएं।

    मान लीजिए कि हमारे पास दो तार str1 और str2 हैं, हमें लंबाई L के कई जादुई जोड़े खोजने हैं। दो तार जादुई होंगे यदि प्रत्येक अनुक्रमणिका I के लिए, str1[i]

  1. एक सरणी तत्व खोजें जैसे कि सभी तत्व इसके द्वारा c++ . का उपयोग करके विभाज्य हैं

    विचार करें कि हमारे पास कुछ तत्वों के साथ एक सरणी ए है। हमें A से एक अवयव इस प्रकार ज्ञात करना है कि सभी तत्वों को इससे विभाजित किया जा सके। मान लीजिए कि ए [15, 21, 69, 33, 3, 72, 81] जैसा है, तो तत्व 3 होगा, क्योंकि सभी संख्याएं 3 से विभाज्य हो सकती हैं। इस समस्या को हल करने के लिए, हम ए में सबसे

  1. एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc