কম্পিউটার

C++ এ প্রদত্ত বহুপদীর মূলের যোগফলকে ছোট করুন


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

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

− int arr[] ={ 2, -1, 4, 9, -1, 10, -5}

আউট − একটি প্রদত্ত বহুপদীর মূলের যোগফলকে ছোট করুন:-1 -5 2 4 9 -1 10

ব্যাখ্যা − আমাদের একটি পূর্ণসংখ্যার অ্যারে দেওয়া হয়েছে যাতে 7টি উপাদান রয়েছে অর্থাৎ বহুপদী শক্তি হবে 6। সুতরাং, আমরা ন্যূনতম আউটপুট অর্জন করব যেমন-:-1 * x^6 - 5 * x^5 + 2 * x^4 + 4 * x^3 + 9 * x^2 - 1 * x^1 + 10 যার ফলে মূলের ন্যূনতম যোগফল হবে -5 এবং 1।

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

আউট − একটি প্রদত্ত বহুপদীর মূলের যোগফলকে ছোট করুন:-1 -2 3 4

ব্যাখ্যা − আমাদের একটি পূর্ণসংখ্যার অ্যারে দেওয়া হয়েছে যাতে 7টি উপাদান রয়েছে অর্থাৎ বহুপদী শক্তি হবে 6। সুতরাং, আমরা ন্যূনতম আউটপুট অর্জন করব যেমন-:-1 * x^3 - 2 * x^2 + 3 * x^1 + 4 যা হবে ফলে ন্যূনতম মূলের যোগফল -1 হিসাবে।

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

  • পূর্ণসংখ্যা উপাদানগুলির একটি অ্যারে ইনপুট করুন এবং একটি অ্যারের আকার গণনা করুন। আরও প্রক্রিয়াকরণের জন্য ফাংশনে ডেটা পাস করুন।

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

    • vec_1, vec_2, vec_3 হিসাবে পূর্ণসংখ্যার প্রকার ভেক্টরের ভেরিয়েবল ঘোষণা করুন।

    • একটি অ্যারের আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। লুপের ভিতরে, IF arr[i]> 0 চেক করুন তারপর vec_2 এ পুশ_ব্যাক করুন। অন্যথায় IF, arr[i] <0 তারপর puch_back i to vec_3.

    • vec_2 এবং vec_3 এর আকার গণনা করুন।

    • IF vec_2_size>=2 এবং IF vec_3_size>=2 চেক করুন তারপর vec_2 এর আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন এবং লুপের ভিতরে, IFarr[vec_2[i]] চেক করুন max_val থেকে বড় তারপর temp সেট করুন vec_2[i] এবং max_val to arr[temp].

    • একটি vec_2 আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। লুপের ভিতরে, IF arr[vec_2[i]] চেক করুন IF vec_2[i] টেম্পের সমান নয় চেক করার চেয়ে min_val থেকে কম তারপর temp_2 কে vec_2[i] এ এবং min_val arr[temp_2]

    • একটি vec_3 আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। লুপের ভিতরে, N_max থেকে বড় IF abs(arr[vec_3[i]]) চেক করুন তারপর N_temp সেট করুন vec_3[i] এবং N_max এ abs(arr[N_temp])

    • i থেকে 0 থেকে vec_3 আকার পর্যন্ত FOR লুপ শুরু করুন এবং IF abs(arr[vec_3[i]]) চেক করুন N_min এর চেয়ে কম চেক করুন IFvec_3[i] N_temp এর সমান নয় তারপর N_temp_2 সেট করুন vec_3[i] এবং N_min =abs(arr) [N_temp_2])

    • IF vec_2_data vec_3_data থেকে কম তারপরে FOR লুপের ভিতরে i থেকে 0 পর্যন্ত একটি অ্যারের সাইজ পর্যন্ত চেক করুন, যদি i temp_2 এর সমান না হয় এবং i temp এর সমান না হয় তাহলে push_back arr[i] থেকে vec_1 এ চেক করুন। অন্যথায়, একটি অ্যারের আকার পর্যন্ত i থেকে 0 পর্যন্ত FOR লুপের ভিতরে, যদি আমি N_temp_2 এর সমান না হয় এবং i N_temp এর সমান না হয় তবে vec_1 এ push_back arr[i]।

    • vec_1 অতিক্রম করার জন্য লুপ শুরু করুন এবং ফলস্বরূপ vec_1[i] মুদ্রণ করতে থাকুন।

    • অন্যথায়, vec_2_size>=2 চেক করুন তারপর একটি vec_2 আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। IF arr[vec_2[i]] max_val এর চেয়ে বড় চেক করুন তারপর temp সেট করুন vec_2[i] এবং max_val এ arr[temp]।

    • i থেকে 0 পর্যন্ত FOR লুপ শুরু করুন যতক্ষণ না আমি একটি vec_2 আকারের চেয়ে কম। লুপের ভিতরে, IF arr[vec_2[i]] চেক করুন IFvec_2[i] চেক করার চেয়ে min_val-এর চেয়ে কম temp_2 থেকে vec_2[i] এবং min_val to arr[temp_2]।

    • একটি অ্যারের আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। লুপের ভিতরে, IF i temp_2 এর সমান না হলে চেক করুন তারপর IF i temp-এর সমান না তারপর puch_back arr[i] to vec_1 চেক করুন।

    • ELSE IF, vec_3>=2 তারপর FOR লুপ শুরু করুন i থেকে 0 পর্যন্ত vec_3 সাইজ পর্যন্ত এবং চেক করুন IF abs(arr[vec_3[i]]) N_max থেকে বড় তারপর temp সেট করুন vec_3[i] এবং N_max এ abs(arr[temp) ])।

    • i থেকে 0 পর্যন্ত লুপ স্টার্ট করুন যতক্ষণ না i কম tha vec_3.size() হয় এবং IFabs(arr[vec_3[i]]) চেক করুন N_min এর চেয়ে কম চেক করুন IF vec_3[i] সেট temp_2 থেকে vec_3[i] টেম্পের সমান নয় এবং N_min থেকে abs(arr[temp_2])।

    • একটি অ্যারের আকার পর্যন্ত i থেকে 0 পর্যন্ত লুপ শুরু করুন। চেক করুন যদি আমি টেম্প_2 এর সমান না হয় তাহলে চেক করুন যদি আমি টেম্পের সমান না তারপরে push_back arr[i] to vc_1 এবং মুদ্রণ চালিয়ে যান।

উদাহরণ

#include <bits/stdc++.h>
using namespace std;
void Minimize_root(int arr[], int size){
   vector<int> vec_1;
   vector<int> vec_2;
   vector<int> vec_3;
   for (int i = 0; i < size; i++){
      if (arr[i] > 0){
         vec_2.push_back(i);
      }
      else if (arr[i] < 0){
         vec_3.push_back(i);
      }
   }
int vec_2_size = vec_2.size();
int vec_3_size = vec_3.size();

if(vec_2_size >= 2){
   if(vec_3_size>= 2){
      int max_val = INT_MIN; //max_val
      int temp = -1; //temp
      int min_val = INT_MAX; //min_val
      int temp_2 = -1; //temp_2
      int N_max = INT_MIN; // N_max
      int N_temp = -1; // N_temp
      int N_min = INT_MAX; //N_min
      int N_temp_2 = -1; //N_temp_2

      for (int i = 0; i < vec_2.size(); i++){
         if (arr[vec_2[i]] > max_val){
            temp = vec_2[i];
            max_val = arr[temp];
         }
      }

      for (int i = 0; i < vec_2.size(); i++){
         if (arr[vec_2[i]] < min_val){
            if(vec_2[i] != temp){
               temp_2 = vec_2[i];
               min_val = arr[temp_2];
            }
         }
      }
      for (int i = 0; i < vec_3.size(); i++){
         if (abs(arr[vec_3[i]]) > N_max){
            N_temp = vec_3[i];
            N_max = abs(arr[N_temp]);
         }
      }
      for (int i = 0; i < vec_3.size(); i++){
         if(abs(arr[vec_3[i]]) < N_min ){
               if(vec_3[i] != N_temp){
                  N_temp_2 = vec_3[i];
                  N_min = abs(arr[N_temp_2]);
               }
          }
      }

      double vec_2_data = -1.0 * (double)max_val / (double)min_val;
      double vec_3_data = -1.0 * (double)N_max / (double)N_min;

      if (vec_2_data < vec_3_data){
         vec_1.push_back(arr[temp_2]);
         vec_1.push_back(arr[temp]);
         for (int i = 0; i < size; i++){
            if (i != temp_2 && i != temp){
               vec_1.push_back(arr[i]);
            }
         }
      }
      else{
         vec_1.push_back(arr[N_temp_2]);
         vec_1.push_back(arr[N_temp]);

         for (int i = 0; i < size; i++){
            if (i != N_temp_2 && i != N_temp){
               vec_1.push_back(arr[i]);
             }
         }
      }
      for (int i = 0; i < vec_1.size(); i++){
         cout << vec_1[i] << " ";
      }
   }
}
else if(vec_2_size >= 2){
   int max_val = INT_MIN;
   int temp = -1;
   int min_val = INT_MAX;
   int temp_2 = -1;
   for (int i = 0; i < vec_2.size(); i++){
      if (arr[vec_2[i]] > max_val){
         temp = vec_2[i];
         max_val = arr[temp];
      }
   }
   for (int i = 0; i < vec_2.size(); i++){
      if (arr[vec_2[i]] < min_val){
         if(vec_2[i] != temp){
            temp_2 = vec_2[i];
            min_val = arr[temp_2];
         }
      }
   }
   vec_1.push_back(arr[temp_2]);
   vec_1.push_back(arr[temp]);
   int i = 0; 
   i < size; i++; {
      if(i != temp_2){
         if(i != temp){
            vec_1.push_back(arr[i]);
         }
      }
   }
   for (int i = 0; i < vec_1.size(); i++){
      cout << vec_1[i] << " ";
   }
}
else if(vec_3_size >= 2){
   int N_max = INT_MIN;
   int temp = -1;
   int N_min = INT_MAX;
   int temp_2 = -1;
   for (int i = 0; i < vec_3.size(); i++){
      if (abs(arr[vec_3[i]]) > N_max){
         temp = vec_3[i];
         N_max = abs(arr[temp]);
      }
   }
   for (int i = 0; i < vec_3.size(); i++){
      if(abs(arr[vec_3[i]]) < N_min){
         if(vec_3[i] != temp){
            temp_2 = vec_3[i];
            N_min = abs(arr[temp_2]);
         }
      }
   }
   vec_1.push_back(arr[temp_2]);
   vec_1.push_back(arr[temp]);
   for (int i = 0; i < size; i++){
         if (i != temp_2){
            if(i != temp){
               vec_1.push_back(arr[i]);
            }
         }
      }
      for (int i = 0; i < vec_1.size(); i++){
         cout << vec_1[i] << " ";
      }
   } else {
      cout<<"Not Possible";
   }
}
int main(){
   int arr[] = { 2, -1, 4, 9, -1, 10, -5};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Minimize the sum of roots of a given polynomial is: ";
   Minimize_root(arr, size);
   return 0;
}

আউটপুট

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

Minimize the sum of roots of a given polynomial is: -1 -5 2 4 9 -1 10

  1. C++ এ প্রদত্ত নিখুঁত বাইনারি গাছের সমস্ত নোডের সমষ্টি খুঁজুন

  2. একটি প্রদত্ত স্ট্রিং C++ এ যোগ-স্ট্রিং কিনা তা পরীক্ষা করুন

  3. একটি প্রদত্ত সংখ্যার সংখ্যা যোগ করার জন্য C++ প্রোগ্রাম

  4. পাইথনে প্রদত্ত জটিল শিকড় সহ একটি বহুপদীর মূল গণনা করুন