Computer >> Máy Tính >  >> Lập trình >> C ++

Giảm thiểu tổng các căn của một đa thức đã cho trong C ++

Chúng ta được cung cấp với một mảng các phần tử nguyên đại diện cho các giá trị hệ số của một đa thức. Kích thước của một mảng sẽ là ‘n’ tức là số phần tử trong một mảng. Bậc của đa thức luôn bắt đầu bằng n-1 vì sẽ có một giá trị không đổi ở cuối chuỗi đa thức. Nhiệm vụ là thay thế hệ số bằng các đa thức khác theo cách sao cho tổng các căn sẽ được giảm thiểu.

Hãy cho chúng tôi xem các tình huống đầu ra đầu vào khác nhau cho việc này -

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

Hết - Rút gọn tổng các nghiệm của đa thức đã cho là:-1 -5 2 4 9 -1 10

Giải thích - chúng ta được cung cấp với một mảng số nguyên có chứa 7 phần tử, tức là lũy thừa của đa thức sẽ là 6. Vì vậy, chúng ta sẽ đạt được sản lượng tối thiểu là-:-1 * x ^ 6 - 5 * x ^ 5 + 2 * x ^ 4 + 4 * x ^ 3 + 9 * x ^ 2 - 1 * x ^ 1 + 10 mà sẽ dẫn đến tổng các nghiệm tối thiểu là -5 và 1.

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

Hết - Rút gọn tổng các nghiệm của đa thức đã cho là:-1 -2 3 4

Giải thích - chúng ta được cung cấp với một mảng số nguyên chứa 7 phần tử tức là lũy thừa của đa thức sẽ là 6. Vì vậy, chúng ta sẽ đạt được sản lượng tối thiểu là-:-1 * x ^ 3 - 2 * x ^ 2 + 3 * x ^ 1 + 4 mà sẽ dẫn đến tổng số gốc tối thiểu là -1.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Nhập một mảng các phần tử số nguyên và tính kích thước của một mảng. Chuyển dữ liệu đến hàm để xử lý thêm.

  • Bên trong hàm Minimize_root (arr, size)

    • Khai báo các biến kiểu vectơ kiểu số nguyên là vec_1, vec_2, vec_3.

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến hết kích thước của một mảng. Bên trong vòng lặp, kiểm tra IF arr [i]> 0 rồi push_back i đến vec_2. Khác IF, arr [i] <0 rồi puch_back i đến vec_3.

    • Tính kích thước của vec_2 và vec_3.

    • Kiểm tra IF vec_2_size> =2 VÀ IF vec_3_size> =2 rồi bắt đầu vòng lặp FOR từ i đến 0 cho đến khi kích thước của vec_2 và bên trong vòng lặp, hãy kiểm tra IFarr [vec_2 [i]] lớn hơn max_val rồi đặt nhiệt độ thành vec_2 [i] và max_val thành arr [temp].

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước của vec_2. Bên trong vòng lặp, hãy kiểm tra IF arr [vec_2 [i]] nhỏ hơn min_val hơn là kiểm tra IF vec_2 [i] không bằng tạm thời, sau đó đặt temp_2 thành vec_2 [i] và min_val thành arr [temp_2]

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước của vec_3. Bên trong vòng lặp, hãy kiểm tra IF abs (arr [vec_3 [i]]) lớn hơn N_max, sau đó đặt N_temp thành vec_3 [i] và N_max thành abs (arr [N_temp])

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước vec_3 và kiểm tra IF abs (arr [vec_3 [i]]) nhỏ hơn N_min so với kiểm tra IFvec_3 [i] không bằng N_temp, sau đó đặt N_temp_2 thành vec_3 [i] và N_min =abs (arr [N_temp_2])

    • Kiểm tra IF vec_2_data nhỏ hơn vec_3_data sau đó bên trong vòng lặp FOR từ i đến 0 cho đến kích thước của một mảng, kiểm tra IF i không bằng temp_2 VÀ tôi không bằng temp rồi push_back arr [i] thành vec_1. ELSE, bên trong vòng lặp FOR từ i đến 0 cho đến khi kích thước của một mảng, hãy kiểm tra NẾU tôi không bằng N_temp_2 VÀ tôi không bằng N_temp rồi push_back arr [i] thành vec_1.

    • Bắt đầu vòng lặp FOR để xem qua vec_1 và kết quả là tiếp tục in vec_1 [i].

    • ELSE IF, kiểm tra vec_2_size> =2 rồi bắt đầu vòng lặp FOR từ i đến 0 cho đến khi có kích thước bằng vec_2. Kiểm tra IF arr [vec_2 [i]] lớn hơn max_val, sau đó đặt nhiệt độ thành vec_2 [i] và max_val thành arr [temp].

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn kích thước của vec_2. Trong vòng lặp, hãy kiểm tra IF arr [vec_2 [i]] nhỏ hơn min_val hơn là kiểm tra IFvec_2 [i] không bằng tạm thời hơn đặt temp_2 thành vec_2 [i] và min_val thành arr [temp_2].

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước của một mảng. Trong vòng lặp, hãy kiểm tra NẾU tôi không bằng với temp_2 rồi kiểm tra NẾU tôi không bằng với tạm thời rồi puch_back arr [i] thành vec_1.

    • ELSE IF, vec_3> =2 sau đó bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước vec_3 và kiểm tra IF abs (arr [vec_3 [i]]) lớn hơn N_max rồi đặt temp thành vec_3 [i] và N_max thành abs (arr [temp ]).

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến khi tôi nhỏ hơn vec_3.size () và kiểm tra IFabs (arr [vec_3 [i]]) nhỏ hơn N_min so với kiểm tra IF vec_3 [i] không bằng temp hơn đặt temp_2 thành vec_3 [i] và N_min thành abs (arr [temp_2]).

    • Bắt đầu vòng lặp FOR từ i đến 0 cho đến kích thước của một mảng. Kiểm tra NẾU tôi không bằng với temp_2 rồi kiểm tra NẾU tôi không bằng với tạm thời rồi push_back arr [i] thành vc_1 và tiếp tục in.

Ví dụ

#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;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra Kết quả sau

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