কম্পিউটার টিউটোরিয়াল

C++-এ দেয়া a এবং b ইউনিট ব্যবহার করে ম্যাক্সিমাম এলিমেন্ট পার করা


একটি বাইনারি অ্যারে arr[] এবং দুটি ভেরিয়েবল a এবং b কিছু প্রাথমিক মানের সাথে দেওয়া আছে। অ্যারে arr[]-এ একটি এলিমেন্ট পার করার দুটি উপায় есть −

  • যদি arr[i] == 1, তবে a-র থেকে ১ ইউনিট ব্যবহার করা যায়, b-তে কোনো পরিবর্তন নেই। যদি b-র থেকে ১ ইউনিট ব্যবহার করা হয়, তবে a ১ ইউনিট বাড়ে। (নোট: a-এর মান এর আসল মানের চেয়ে বড় হবena।)

  • যদি arr[i] == 0, তবে a বা b-র থেকে ১ ইউনিট ব্যবহার করা যায়।

এখন একটি উদাহরণ দিয়ে বুঝি −

ইনপুট

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

আউটপুট

5

ব্যাখ্যা

১ম এলিমেন্ট পার করতে, a-র থেকে ১ ইউনিট ব্যবহার (a = 1, b = 2)।

২য় এলিমেন্ট পার করতে, a-র থেকে ১ ইউনিট ব্যবহার (a = 0, b = 2)।

৩য় এলিমেন্ট পার করতে, b-র থেকে ১ ইউনিট ব্যবহার (a = 0, b = 1)।

৪র্থ এলিমেন্ট পার করতে, b-র থেকে ১ ইউনিট ব্যবহার যা a-কে ১ ইউনিট বাড়ায় (a = 1, b = 0)।

৫ম এলিমেন্ট পার করতে, a-র থেকে ১ ইউনিট ব্যবহার (a = 0, b = 0)।

অতএব, আমরা সব এলিমেন্ট পার করলাম এবং আউটপুট হয় ৫।

ইনপুট

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 থেকে ১ বিয়োগ করে এলিমেন্ট পার করা হয় এবং a = min(Oa, a + 1) সেট করা হয় যেন a আসল মানের চেয়ে বড় না হয়।

    অন্যথায় সিম্পলি b থেকে ১ বিয়োগ করা হয় a-কে প্রভাবিত না করে।

  • অন্যথায় চেক করা হয় (b == 0) এবং যদি হয়, তবে সিম্পলি a থেকে ১ বিয়োগ।

  • অন্যথায় চেক করা হয় (arr[i] == 1 && a < Oa) এবং যদি হয়, তবে করেন্ট এলিমেন্ট = 1 চেক করে b থেকে ১ বিয়োগ এবং a = min(Oa, a + 1)।

  • অন্যথায় সিম্পলি a থেকে ১ বিয়োগ এবং max ইনক্রিমেন্ট।

  • লুপের বাইরে max রিটার্ন।

উদাহরণ

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

int MaxElements(int arr[], int a, int b, int size){ 
    // Oa will have original value of a 
    int Oa = a; 
    int max = 0; 
    // Iterate in the binary array 
    for (int i = 0; i < size; i++){ 
        // Break loop if a and b, both are = 0 
        if (a == 0 && b == 0) 
            break; 
        // If a is not present, use b 
        else if (a == 0){ 
            //increase a by 1 if arr[i] == 1 
            if (arr[i] == 1){ 
                b -= 1; 
                //Checking if original value is not exceeded 
                a = min(Oa, a + 1); 
            } 
            else 
                b -= 1; 
        } 
        // If b is not present, use a 
        else if (b == 0) 
            a--; 
        // if arr[i] == 1,use b 
        else if (arr[i] == 1 && a < Oa){ 
            b -= 1; 
            a = min(Oa, a + 1); 
        } 
        else 
            a--; 
        max++; 
    } 
    return max; 
} 
//main function 
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 সেগমেন্ট দিয়ে প্রদর্শনযোগ্য সর্বোচ্চ সংখ্যা

  2. C++-এ দেওয়া লাইন সেগমেন্ট দিয়ে সর্বোচ্চ সমান্তরালচতুর্ভুজ বানানো

  3. C++-তে লিংকড লিস্ট থেকে K দিয়ে বিভাজ্য সর্বোচ্চ ও ন্যূনতম এলিমেন্ট বের করা

  4. টাপলে সর্বোচ্চ ও ন্যূনতম K এলিমেন্ট খুঁজে বের করার পাইথন প্রোগ্রাম