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

C++ में दिए गए a और b इकाइयों का उपयोग करके पार किए जा सकने वाले अधिकतम तत्व


एक बाइनरी सरणी arr[] और दो चर a और b दिए गए हैं जिनके कुछ प्रारंभिक मान हैं। सरणी arr[] में एक तत्व को पार करने के दो तरीके हैं -

  • यदि arr[i] == 1, तो a से 1 इकाई का उपयोग किया जा सकता है, जिससे b में कोई परिवर्तन नहीं होगा। यदि b से 1 इकाई का उपयोग किया जाता है, तो a 1 इकाई से बढ़ जाता है। (ध्यान दें कि a का मान उसके मूल मान से अधिक नहीं बढ़ाया जा सकता।)
  • यदि arr[i] == 0, तो a या b से 1 इकाई का उपयोग किया जा सकता है।

आइए अब एक उदाहरण का उपयोग करके समझते हैं कि हमें क्या करना है -

इनपुट

arr[] = {0, 0, 0, 1, 1}, a = 2, b = 2

आउटपुट

5

व्याख्या

पहले तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 1, b = 2)।

दूसरे तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 0, b = 2)।

तीसरे तत्व को पार करने के लिए, b से 1 इकाई का उपयोग करें (a = 0, b = 1)।

चौथे तत्व को पार करने के लिए, b से 1 इकाई का उपयोग करें जो a को 1 इकाई से बढ़ाता है (a = 1, b = 0)।

पांचवें तत्व को पार करने के लिए, a से 1 इकाई का उपयोग करें (a = 0, b = 0)।

इसलिए, हमने सभी तत्वों को पार कर लिया और आउटपुट 5 हो जाता है।

इनपुट

arr[] = {1, 1, 1, 0, 1}, a = 1, b = 2

आउटपुट

4

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

  • MaxElements() फ़ंक्शन में Oa = 0 और max = 0 प्रकार के int चर आरंभ करें ताकि a का मूल मान और अंतिम उत्तर क्रमशः संग्रहीत हो सके।
  • i = 0 से i < size तक लूप करें ताकि सरणी में प्रत्येक तत्व की जांच की जा सके।
  • पहले जांचें कि क्या a और b दोनों शून्य के बराबर हैं, तो लूप से बाहर निकलें।
  • अन्यथा जांचें कि क्या (a == 0) और यदि हां, तो जांचें कि क्या वर्तमान तत्व = 1 है और उस तत्व को पार करने के लिए b से 1 घटाएं और a = min(Oa, a + 1) रखें ताकि a अपने मूल मान से अधिक न हो। अन्यथा बस a को प्रभावित किए बिना b से 1 घटाएं।
  • अन्यथा जांचें कि क्या (b == 0) और यदि हां, तो बस a से 1 घटाएं।
  • अन्यथा जांचें कि क्या (arr[i] == 1 && a < Oa) और यदि हां, तो जांचें कि क्या वर्तमान तत्व = 1 है और उस तत्व को पार करने के लिए b से 1 घटाएं और a = min(Oa, a + 1) रखें।
  • अन्यथा बस a से 1 घटाएं और max बढ़ाएं।
  • लूप के बाहर, max वापस करें।

कार्यक्रम उदाहरण

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

int MaxElements(int arr[], int a, int b, int size){
    // Oa में a का मूल मान होगा
    int Oa = a;
    int max = 0;
    // बाइनरी सरणी में पुनरावृति करें
    for (int i = 0; i < size; i++){
        // लूप तोड़ें यदि a और b दोनों = 0 हैं
        if (a == 0 && b == 0)
            break;
        // यदि a मौजूद नहीं है, तो b का उपयोग करें
        else if (a == 0){
            // यदि arr[i] == 1 तो a को 1 से बढ़ाएं
            if (arr[i] == 1){
                b -= 1;
                // जांचें कि मूल मान पार नहीं हुआ है
                a = min(Oa, a + 1);
            }
            else
                b -= 1;
        }
        // यदि b मौजूद नहीं है, तो a का उपयोग करें
        else if (b == 0)
            a--;
        // यदि arr[i] == 1, b का उपयोग करें
        else if (arr[i] == 1 && a < Oa){
            b -= 1;
            a = min(Oa, a + 1);
        }
        else
            a--;
        max++;
    }
    return max;
}

// main फ़ंक्शन
int main(){
    int arr[] = { 1, 1, 1, 0, 1 };
    int size = sizeof(arr) / sizeof(arr[0]);
    int a = 1;
    int b = 2;
    cout << MaxElements(arr, a, b, size);
    return 0;
}

आउटपुट

4
  1. C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित अधिकतम संख्या C++ में N सेगमेंट का उपयोग करके सेवन सेगमेंट डिस्प्ले पर प्रदर्शित अधिकतम संख्या

    दिया गया कार्य N सेगमेंट का उपयोग करके किसी भी संख्या के सेवन सेगमेंट डिस्प्ले पर प्रदर्शित की जा सकने वाली अधिकतम संख्या ढूंढना है।उदाहरण से समझते हैंइनपुट - N=5आउटपुट - 71व्याख्या - सबसे बड़ी संख्या सेवन सेगमेंट डिस्प्ले पर इस प्रकार प्रदर्शित होगी।इनपुट - N=6आउटपुट - 111प्रयुक्त दृष्टिकोणनिम्नलिख

  1. - C++ में दी गई लाइन सेगमेंट लंबाई से अधिकतम समानांतर चतुर्भुज की संख्या

    दिया गया कार्य दिए गए N लाइन सेगमेंट का उपयोग करके बनाए जा सकने वाले अधिकतम समानांतर चतुर्भुज की संख्या ढूंढना है यदि प्रत्येक लाइन सेगमेंट का उपयोग अधिकतम एक समानांतर चतुर्भुज में किया जा सकता है।उदाहरण से समझते हैंइनपुट - Arr[] = {8, 3, 1, 3, 8, 7, 1, 3, 5, 3}आउटपुट - 2व्याख्या - उपरोक्त दिए गए ला

  1. C++ में दिए गए नंबर k से विभाज्य लिंक्ड लिस्ट के अधिकतम और न्यूनतम एलिमेंट C++ में दिए गए नंबर k से विभाज्य लिंक्ड लिस्ट के अधिकतम और न्यूनतम एलिमेंट

    लिंक्ड लिस्ट एक रैखिक डेटा संरचना है जिसमें एलिमेंट्स पॉइंटर्स के माध्यम से जुड़े होते हैं। लिंक्ड लिस्ट के प्रत्येक एलिमेंट या नोड में एक डेटा भाग और लिंक होता है, या हम कह सकते हैं कि क्रम में अगले एलिमेंट का पॉइंटर होता है। एलिमेंट्स मेमोरी में नॉन-कंटीगुअस स्थान ले सकते हैं। हमें एक सिंगली लिं