最小化給定多項式的根之和 (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,則將i新增到vec_2。否則IF arr[i] < 0,則將i新增到vec_3。

    • 計算vec_2和vec_3的大小。

    • 檢查IF vec_2_size >= 2 AND IF vec_3_size >= 2,則從i=0開始迴圈到vec_2的大小,並在迴圈內部檢查IF arr[vec_2[i]]大於max_val,則將temp設定為vec_2[i]並將max_val設定為arr[temp]。

    • 從i=0開始迴圈到vec_2的大小。在迴圈內部,檢查IF arr[vec_2[i]]小於min_val,則檢查IF vec_2[i]不等於temp,則將temp_2設定為vec_2[i]並將min_val設定為arr[temp_2]。

    • 從i=0開始迴圈到vec_3的大小。在迴圈內部,檢查IF abs(arr[vec_3[i]])大於N_max,則將N_temp設定為vec_3[i]並將N_max設定為abs(arr[N_temp])。

    • 從i=0開始迴圈到vec_3的大小,並檢查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])。

    • 檢查IF vec_2_data小於vec_3_data,則在從i=0到陣列大小的FOR迴圈內部,檢查IF i不等於temp_2 AND i不等於temp,則將arr[i]新增到vec_1。否則,在從i=0到陣列大小的FOR迴圈內部,檢查IF i不等於N_temp_2 AND i不等於N_temp,則將arr[i]新增到vec_1。

    • 開始FOR迴圈遍歷vec_1,並列印vec_1[i]作為結果。

    • ELSE IF,檢查vec_2_size >= 2,則從i=0開始迴圈到vec_2的大小。檢查IF arr[vec_2[i]]大於max_val,則將temp設定為vec_2[i]並將max_val設定為arr[temp]。

    • 從i=0開始迴圈到i小於vec_2的大小。在迴圈內部,檢查IF arr[vec_2[i]]小於min_val,則檢查IF vec_2[i]不等於temp,則將temp_2設定為vec_2[i]並將min_val設定為arr[temp_2]。

    • 從i=0開始迴圈到陣列大小。在迴圈內部,檢查IF i不等於temp_2,則檢查IF i不等於temp,則將arr[i]新增到vec_1。

    • ELSE IF,vec_3 >= 2,則從i=0開始迴圈到vec_3的大小,並檢查IF abs(arr[vec_3[i]])大於N_max,則將temp設定為vec_3[i]並將N_max設定為abs(arr[temp])。

    • 從i=0開始迴圈到i小於vec_3.size(),並檢查IF abs(arr[vec_3[i]])小於N_min,則檢查IF vec_3[i]不等於temp,則將temp_2設定為vec_3[i]並將N_min設定為abs(arr[temp_2])。

    • 從i=0開始迴圈到陣列大小。檢查IF i不等於temp_2,則檢查IF i不等於temp,則將arr[i]新增到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

更新於:2021年10月22日

79 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.