কম্পিউটার

সর্বাধিক উপাদান যা C++ এ a এবং b এর প্রদত্ত ইউনিট ব্যবহার করে অতিক্রম করা যেতে পারে


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

  • যদি arr[i] ==1 হয়, তাহলে a থেকে 1 ইউনিট ব্যবহার করা যেতে পারে , b-এ কোনো পরিবর্তন ছাড়াই . যদি b থেকে 1 ইউনিট ব্যবহার করা হয় , তারপর 1 ইউনিট বৃদ্ধি পায়। (উল্লেখ্য যে a এর মান তার মূল মানের উপরে বাড়ানো যাবে না।)

  • যদি arr[i] ==0 হয়, তাহলে a থেকে 1 ইউনিট ব্যবহার করা যেতে পারে অথবা b .

আসুন এখন বুঝতে পারি −

একটি উদাহরণ ব্যবহার করে আমাদের কী করতে হবে

ইনপুট

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

আউটপুট

5

ব্যাখ্যা

1 st অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =1, b =2)।

2 nd অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =2)।

3 rd অতিক্রম করতে উপাদান, b থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =1)।

4 th অতিক্রম করতে উপাদান, b থেকে 1 ইউনিট ব্যবহার করুন যা a বৃদ্ধি করে 1 ইউনিট দ্বারা (a =1, b =0)।

5 th অতিক্রম করতে উপাদান, a থেকে 1 ইউনিট ব্যবহার করুন (a =0, b =0)।

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

ইনপুট

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

আউটপুট

4

নিম্নলিখিত প্রোগ্রামে ব্যবহৃত পদ্ধতি

  • ফাংশনে MaxElements() ভেরিয়েবল শুরু করে Oa =0 এবং সর্বোচ্চ =0, যথাক্রমে a এবং চূড়ান্ত উত্তরের মূল মান সংরক্ষণ করতে int উভয় প্রকার।

  • অ্যারের প্রতিটি উপাদান পরীক্ষা করতে i =0 থেকে i

  • প্রথমে চেক করুন উভয়ই a কিনা এবং b শূন্যের সমান, তারপর লুপ থেকে বেরিয়ে আসুন।

  • অন্যথায় পরীক্ষা করুন যদি (a ==0) এবং যদি তাই হয়, তারপর পরীক্ষা করুন বর্তমান উপাদান =1 এবং সেই উপাদানটি অতিক্রম করতে b থেকে 1 বিয়োগ করুন এবং a =min(Oa, a + 1) রাখুন যাতে a তার আসলটির চেয়ে বেশি না হয় মান।

    অন্যথায় a কে প্রভাবিত না করে b থেকে 1 বিয়োগ করুন।

  • অন্যথায় পরীক্ষা করুন যদি (b ==0) এবং যদি তাই হয়, তাহলে কেবল a থেকে 1 বিয়োগ করুন।

  • অন্যথায় পরীক্ষা করুন যদি (arr[i] ==1 &&a

  • অন্যথায় a থেকে 1 বিয়োগ করুন এবং সর্বোচ্চ বৃদ্ধি করুন .

  • লুপের বাইরে, সর্বোচ্চ ফিরুন .

উদাহরণ

#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. পাইথন ব্যবহার করে Tuple-এ সর্বাধিক এবং সর্বনিম্ন K উপাদান