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

C++ में K से विभाज्य योग वाले जोड़ों की संख्या को अधिकतम करना


दिया गया कार्य उन जोड़ों arr[i] + arr[j] की अधिकतम संख्या की गणना करना है जो K से विभाज्य हैं जहां arr[] N इंटीजर्स वाला एक ऐरे है।

दिया गया शर्त है कि एक विशेष इंडेक्स नंबर का उपयोग एक से अधिक जोड़े में नहीं किया जा सकता।

इनपुट

arr[] = {1, 2, 5, 8, 3}, K=2

आउटपुट

2

व्याख्या - वांछित जोड़े हैं: (0,2), (1,3) क्योंकि 1+5=6 और 2+8=10। दोनों 6 और 10, 2 से विभाज्य हैं।

वैकल्पिक उत्तर जोड़े हो सकते हैं: (0,4), (1,3) या (2,4), (1,3) लेकिन उत्तर वही रहता है, यानी 2।

इनपुट

arr[] = {1, 3, 5, 2, 3, 4}, K=3

आउटपुट

3

नीचे दिए गए प्रोग्राम में उपयोग किया गया दृष्टिकोण

  • इंट टाइप के वेरिएबल n में ऐरे का आकार संग्रहीत करें
  • फंक्शन MaxPairs() में अनऑर्डर्ड मैप का उपयोग करें और ऐरे के प्रत्येक एलिमेंट के लिए um[arr[i]%K] को एक से बढ़ाएं
  • हर संभावित um वैल्यू को पुनरावृत्त करें और प्राप्त करें
  • यदि um वैल्यू शून्य है तो जोड़ों की संख्या um[0]/2 हो जाएगी
  • फिर हर um वैल्यू 'a' से जोड़े बनाए जा सकते हैं (um[a], um[K-a]) के न्यूनतम का उपयोग करके
  • um वैल्यू से उपयोग किए गए जोड़ों की संख्या घटाएं

उदाहरण

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

int MaxPairs(int arr[], int size, int K) {
    unordered_map<int, int> um;
    for (int i = 0; i < size; i++) {
        um[arr[i] % K]++;
    }
    
    int count = 0;
    /* उन सभी नंबर्स के लिए पुनरावृत्ति जो हैश वैल्यू से कम हैं */
    for (auto it : um) {
        // यदि नंबर 0 है
        if (it.first == 0) {
            // आधा ले रहे हैं क्योंकि वही नंबर
            count += it.second / 2;
            um[it.first] = it.second % 2;
        } else {
            int first = it.first;
            int second = K - it.first;
            
            // न्यूनतम घटना के लिए जांचें
            if (um[first] < um[second]) {
                // न्यूनतम ले रहे हैं
                count += um[first];
                // उपयोग किए गए जोड़े घटाएं
                um[second] -= um[first];
                um[first] = 0;
            } else if (um[first] > um[second]) {
                // न्यूनतम ले रहे हैं
                count += um[second];
                // उपयोग किए गए जोड़े घटाएं
                um[first] -= um[second];
                um[second] = 0;
            } else {
                // जांचें कि क्या नंबर समान हैं
                if (first == second) {
                    // यदि समान हैं तो जोड़ों की संख्या आधी होगी
                    count += it.second / 2;
                    // शेष के लिए जांचें
                    um[it.first] = it.second % 2;
                } else {
                    // जोड़ों की संख्या संग्रहीत करना
                    count += um[first];
                    um[first] = 0;
                    um[second] = 0;
                }
            }
        }
    }
    return count;
}

// मुख्य फंक्शन
int main() {
    int arr[] = {3, 6, 7, 9, 4, 4, 10};
    int size = sizeof(arr) / sizeof(arr[0]);
    int K = 2;
    cout << "Maximize the number of sum pairs which are divisible by K is: " << MaxPairs(arr, size, K);
    return 0;
}

आउटपुट

Maximize the number of sum pairs which are divisible by K is: 3

  1. - C++ में अधिकतम बार आने वाले सभी योग युग्म प्रिंट करें

    इस समस्या में, हमें n अद्वितीय पूर्णांकों की एक सरणी दी गई है। और हमें सरणी के दो पूर्णांकों का योग ढूंढना है जिसकी अधिकतम आवृत्ति है। समस्या के कई समाधान हैं और आपको उन सभी को ढूंढना होगा। इनपुट: सरणी = { 1, 12, 5, 7, 9, 11} आउटपुट: 16 12 व्याख्या - योग 16 और 12 दो बार आते हैं। 5 + 11 = 16 & 7

  1. - C++ में arr[i]*i के योग को अधिकतम करना

    समस्या कथन N पूर्णांकों का एक ऐरे दिया गया है। आपको ऐरे के तत्वों को पुनर्व्यवस्थित करने की अनुमति है। कार्य Σarr[i]*i का अधिकतम मान ढूंढना है, जहां i = 0, 1, 2, .. n-1। यदि इनपुट ऐरे = {4, 1, 6, 2} तो अधिकतम योग 28 होगा यदि हम तत्वों को सॉर्टेड क्रम में पुनर्व्यवस्थित करें: {1, 2, 4, 6} = (1 * 0)

  1. - C++ प्रोग्राम: अंक d वाली संख्याएं ज्ञात करना

    मान लें हमारे पास एक अंक d है, और ऊपरी सीमा n है। हमें 0 से n की सीमा में वे सभी संख्याएं ज्ञात करनी हैं जिनमें d है। इसलिए यदि n = 20, और अंक 3 है, तो संख्याएं [3, 13] होंगी। इस समस्या को हल करने के लिए, हम प्रत्येक संख्या को स्ट्रिंग के रूप में लेंगे, फिर यदि अंक स्ट्रिंग में मौजूद है, तो संख्या