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

एक सरणी में जोड़े की गणना करें जैसे कि सी ++ में एक की आवृत्ति कम से कम दूसरे का मूल्य है

हमें सकारात्मक पूर्णांकों की एक सरणी दी गई है। लक्ष्य arr[] के तत्वों के जोड़े की संख्या ज्ञात करना है जैसे कि जोड़े में तत्व (ए, बी) हों जहां ए की आवृत्ति बी गुना है और बी की आवृत्ति ए है।

आइए उदाहरणों से समझते हैं।

इनपुट - int arr[] ={ 3, 3, 3, 5, 5, 6, 6}

आउटपुट − एक सरणी में युग्मों की संख्या जैसे कि एक की आवृत्ति कम से कम दूसरे का मान हो − 1

स्पष्टीकरण - एक सरणी में मान्य जोड़े जहां ए बार बी बार होता है और बी बार होता है (3, 3) क्योंकि 3 एक सरणी में 3 बार होता है। तो केवल एक वैध जोड़ी है इसलिए गिनती 1 है।

इनपुट - int arr[] ={ 3, 3, 3, 3, 3, 5, 5, 5, 6, 6}

आउटपुट − एक सरणी में युग्मों की संख्या जैसे कि एक की आवृत्ति कम से कम दूसरे का मान हो − 1

स्पष्टीकरण - एक सरणी में मान्य जोड़े जहां ए होता है बी बार होता है और बी होता है ए बार होता है (3, 3), (5, 5) और (3, 5) क्योंकि 3 5 बार होता है और 5 एक सरणी में 3 बार होता है . तो तीन वैध जोड़े हैं इसलिए गिनती 3 है।

नीचे दिए गए प्रोग्राम में इस्तेमाल किया गया तरीका इस प्रकार है

दृष्टिकोण में हम पहले सरणी के तत्वों की आवृत्तियों वाले एक अनियंत्रित मानचित्र को बनाएंगे और पॉप्युलेट करेंगे। लूप के लिए unordered_map का उपयोग करके ट्रैवर्स करें। प्रत्येक तत्व और उसकी आवृत्ति के लिए, यदि कोई आवृत्ति अधिक पाई जाती है, तो जोड़े की संख्या में वृद्धि करें।

  • पूर्णांकों की एक सरणी गिरफ्तारी [] लें।

  • फंक्शन फ़्रीक्वेंसी_दर_वैल्यू (इंट एआर [], इंट साइज़) एरे और उसका आकार लेता है और जोड़े की गिनती देता है जैसे कि जोड़े (ए, बी) होते हैं जहां ए कम से कम बी बार होता है और इसके विपरीत।

  • प्रारंभिक गणना 0 के रूप में लें।

  • arr[] के तत्वों और उनकी आवृत्तियों के लिए unordered_map um लें।

  • जोड़ी start=it.second के प्रत्येक प्रथम मान के लिए और उसके लिए उपयोग करते हुए ट्रैवर्स मानचित्र; (it=iterator), फ़्रीक्वेंसी के लिए ट्रैवर्स मैप>=लूप के लिए इस्तेमाल करना शुरू करें।

  • ऐसे जोड़ियों के लिए वेतन वृद्धि की संख्या।

  • परिणाम के रूप में वापसी की गिनती।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
int frequency_other_value(int arr[], int len){
   int count = 0;
   unordered_map<int, int> um;
   for (int i = 0; i < len; ++i){
      um[arr[i]]++;
   }
   for (auto it : um){
      int start = it.first;
      int end = it.second;
      for (int j = 1; j <= end; j++){
         if (um[j] >= start){
            count++;
         }
      }
   }
   return count;
}
int main(){
   int arr[] = { 3, 3, 3, 5, 5, 6, 6};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Count of pairs in an array such that frequency of one is at least value of other are: "<<frequency_other_value(arr, size);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of pairs in an array such that frequency of one is at least value of other are: 1

  1. C++ में किसी सरणी में सबसे छोटे मान की आवृत्ति ज्ञात कीजिए

    यहां हम देखेंगे कि किसी सरणी में सबसे छोटे तत्व की आवृत्ति कैसे ज्ञात करें। मान लीजिए कि सरणी तत्व [5, 3, 6, 9, 3, 7, 5, 8, 3, 12, 3, 10] हैं, यहाँ सबसे छोटा तत्व 3 है, और इस तत्व की आवृत्ति 4 है। तो आउटपुट 4 है । इसे हल करने के लिए हमें सूची का सबसे छोटा तत्व मिलेगा, फिर हम पहली संख्याओं की घटनाओं

  1. एक सरणी में जोड़े की संख्या पाएं जैसे कि उनका एक्सओआर 0 सी ++ का उपयोग कर रहा है।

    मान लीजिए हमारे पास n तत्वों की एक सरणी है; हमें सरणी में ऐसे कई जोड़े खोजने हैं जिनका XOR 0 होगा। युग्म (x, y) जिसका XOR 0 है, तो x =y है। इसे हल करने के लिए हम सरणी को सॉर्ट कर सकते हैं, फिर यदि दो लगातार तत्व समान हैं, तो गिनती बढ़ाएं। यदि सभी तत्व समान हैं, तो अंतिम गणना नहीं की जा सकती है। उस स

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

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