কম্পিউটার

C++ এ X দিয়ে যেকোনো সাবয়ারের সমস্ত উপাদান গুণ করার পর সাবয়ারের যোগফলকে সর্বোচ্চ করুন


আমাদেরকে একটি পূর্ণসংখ্যা অ্যারে এবং একটি পূর্ণসংখ্যার পরিবর্তনশীল যেমন 'X' দেওয়া হয়েছে। কাজটি হল প্রদত্ত অ্যারে থেকে প্রথমে সাবয়ারের তৈরি করা এবং তারপর একটি পূর্ণসংখ্যা X দিয়ে একটি সাবয়ারের সমস্ত উপাদানকে গুণ করা। অবশেষে সেই উপাদানগুলি খুঁজে বের করুন যা সর্বাধিক যোগফল দেবে।

আসুন এর জন্য বিভিন্ন ইনপুট আউটপুট পরিস্থিতি দেখি -

− int arr[] ={2, 4, 1, -5, -2}, X =3

আউট − X দিয়ে যেকোনো সাবয়ারের সমস্ত উপাদানকে গুণ করার পরে সাবয়ারের যোগফলকে সর্বাধিক করুন:21

ব্যাখ্যা − আমাদেরকে X হিসাবে একটি অ্যারে এবং একটি পূর্ণসংখ্যা ভেরিয়েবল দেওয়া হয়েছে। প্রথমে, প্রদত্ত অ্যারে থেকে সাবয়ারে আনুন, আসুন বলি, {2, 4, 1}। এখন একটি সাবয়ারের সমস্ত উপাদানকে X অর্থাৎ 3 দিয়ে গুণ করুন যাতে অ্যারেটি হবে {6, 12, 3, -5, -2}। শেষ পর্যন্ত, সর্বোচ্চ সাব্যারে যোগফল পরীক্ষা করুন যা 6 + 12 + 3 =21 দ্বারা ফেরত দেওয়া হবে।

− int arr[] ={-1, 2, -6, 3, -4}, x=-1

আউট − X দিয়ে যেকোনো সাবয়ারের সমস্ত উপাদানকে গুণ করার পর সাবঅ্যারে যোগফলকে সর্বাধিক করুন:11

ব্যাখ্যা − আমাদেরকে X হিসাবে একটি অ্যারে এবং একটি পূর্ণসংখ্যা ভেরিয়েবল দেওয়া হয়েছে। প্রথমে, প্রদত্ত অ্যারে থেকে সাবয়ারে আনুন, আসুন বলি, {-1, -6, -4}। এখন একটি সাবয়ারের সমস্ত উপাদানকে X অর্থাৎ -1 দিয়ে গুণ করুন যাতে অ্যারেটি হবে {1, 2, 6, 3, 4}। শেষ পর্যন্ত, সর্বোচ্চ সাব্যারে যোগফল পরীক্ষা করুন যা 1 + 6 + 4 =11 দ্বারা ফেরত দেওয়া হবে।

নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতিটি নিম্নরূপ

  • 'X' হিসাবে একটি পূর্ণসংখ্যা অ্যারে এবং একটি পূর্ণসংখ্যা ভেরিয়েবল ইনপুট করুন। একটি অ্যারের আকার গণনা করুন এবং Max_Subarray(arr, size, x) ফাংশনে ডেটা প্রেরণ করুন।

  • ফাংশনের ভিতরে Max_Subarray(arr, size, x)

    • একটি অ্যারেকে int arr_2[size][3] হিসেবে ঘোষণা করুন এবং একটি অস্থায়ী পরিবর্তনশীলকে 0-এ temp হিসেবে ঘোষণা করুন।

    • C++ এ memset() পদ্ধতি ব্যবহার করে একটি অ্যারের ‘arr_2’-এর সমস্ত উপাদানকে -1 দিয়ে শুরু করে।

    • একটি অ্যারের আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। লুপের ভিতরে, ফাংশন max(temp, check(i, 0, arr, arr_2, size, x)) তে কল করার জন্য temp সেট করুন

    • রিটার্ন টেম্প।

  • ফাংশনের ভিতরে int চেক (int first, int last, int arr[], int arr_2[Max_size][3], int size, int x)

    • গণনা 0 হিসাবে একটি অস্থায়ী পরিবর্তনশীল ঘোষণা করুন.

    • প্রথমে IF =সাইজ চেক করুন তারপর 0

      দিন
    • IF arr_2[first][last] !=-1 চেক করুন তারপর arr_2[first][last] ফেরত দিন।

    • IF last =0 চেক করুন তারপর C++-এর ইনবিল্ট ম্যাক্স ফাংশনটিকে কল করুন ম্যাক্স(count, arr[first] + check(first + 1, 0, arr, arr_2, size, x)) হিসাবে সর্বাধিক মান খুঁজে বের করতে এবং গণনা সেট করুন =সর্বোচ্চ(গণনা, x * arr[first] + check(first + 1, 1, arr, arr_2, size, x))

    • অন্যথায় যদি শেষ =1 চেক করেন তাহলে গণনাকে max(count, x * arr[first] + check(first + 1, 1, arr, arr_2, size, x)) এ গণনা সেট করুন এবং গণনাকে max(count, arr[first] এ সেট করুন। + চেক (প্রথম + 1, 2, arr, arr_2, আকার, x))

    • অন্যথায়, গণনাকে সর্বোচ্চ(গণনা, arr[first] + check(first + 1, 2, arr, arr_2, size, x) এ সেট করুন);

    • গণনা করতে arr_2[প্রথম][শেষ] ফিরে আসুন।

  • ফলাফল প্রিন্ট করুন।

উদাহরণ

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

int check(int first, int last, int arr[], int arr_2[Max_size][3], int size, int x){
   int count = 0;
      if(first == size){
         return 0;
      }
      if(arr_2[first][last] != -1){
         return arr_2[first][last];}
      if (last == 0){
         count = max(count, arr[first] + check(first + 1, 0, arr, arr_2, size, x));
         count = max(count, x * arr[first] + check(first + 1, 1, arr, arr_2, size, x));
      }
      else if(last == 1){
         count = max(count, x * arr[first] + check(first + 1, 1, arr, arr_2, size, x));
         count = max(count, arr[first] + check(first + 1, 2, arr, arr_2, size, x));
      }
      else{
         count = max(count, arr[first] + check(first + 1, 2, arr, arr_2, size, x));
      }
      return arr_2[first][last] = count;
}
int Max_Subarray(int arr[], int size, int x){
   int arr_2[size][3];
   int temp = 0;
   memset(arr_2, -1, sizeof arr_2);
   for(int i = 0; i < size; i++){
      temp = max(temp, check(i, 0, arr, arr_2, size, x));
   }
   return temp;
}
int main(){
   int arr[] = {2, 4, 1, -5, -2};
   int size = sizeof(arr) / sizeof(arr[0]);
   int x = 3;
   cout<<"Maximize the subarray sum after multiplying all elements of any subarray with X are: "<<Max_Subarray(arr, size, x);
   return 0;
}

আউটপুট

যদি আমরা উপরের কোডটি চালাই তবে এটি নিম্নলিখিত আউটপুট তৈরি করবে

Maximize the subarray sum after multiplying all elements of any subarray with X are: 21

  1. C++ এ একটি অনির্দেশিত গ্রাফের সমস্ত সংযুক্ত উপাদানের ন্যূনতম উপাদানগুলির সমষ্টি

  2. C++ এ K নেগেশানের পরে অ্যারের যোগফল সর্বাধিক করুন

  3. C++ এ বারবার বিয়োগ করে সব উপাদান একই করার পর সর্বাধিক অ্যারের যোগফল খুঁজুন

  4. C++ অ্যারের সমস্ত উপাদানে XOR অপারেশন প্রয়োগ করে অ্যারের যোগফলকে মিনিমাইজ করা