Processing math: 100%

最小化给定多项式的根之和 (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并继续打印。

示例

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

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

如果我们运行上面的代码,它将生成以下输出

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

更新于:2021年10月22日

79 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告