在 C++ 中将任何子数组的所有元素与 X 相乘后最大化子数组和
我们得到了一个整数数组和一个整数变量,即“X”。任务是首先从给定的数组中形成子数组,然后将子数组的所有元素与整数X相乘。最后找出将贡献最大和的元素。
让我们看看这个的各种输入输出场景-
在-intarr[]={2,4,1,-5,-2},X=3
Out -将任何子数组的所有元素与X相乘后最大化子数组总和为:21
解释 -我们给出了一个数组和一个整数变量作为X。首先,从给定的数组中获取子数组,假设{2,4,1}。现在将子数组的所有元素乘以X,即3,数组将是{6,12,3,-5,-2}。最后,检查6+12+3=21返回的最大子数组和。
在 -intarr[]={-1,2,-6,3,-4},x=-1
Out-将任何子数组的所有元素与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)
将数组声明为intarr_2[size][3]并将临时变量声明为temp为0。
使用memset()C++中的方法用-1初始化数组'arr_2'的所有元素。
从i到0开始循环FOR直到数组的大小。在循环内,将temp设置为对函数max(temp,check(i,0,arr,arr_2,size,x))的调用
返回温度。
函数内部intcheck(intfirst,intlast,intarr[],intarr_2[Max_size][3],intsize,intx)
将临时变量声明为计数为0。
首先检查IF=size然后返回0
检查是否arr_2[first][last]!=-1然后返回arr_2[first][last]。
检查IFlast=0然后调用C++内置的max函数找出最大值为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))
ELSEIFchecklast=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))
否则,将计数设置为max(count,arr[first]+check(first+1,2,arr,arr_2,size,x));
返回arr_2[first][last]进行计数。
打印结果。
示例
#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<<"将任何子数组的所有元素与X相乘后最大化子数组和是: "<<Max_Subarray(arr, size, x); return 0; }输出结果
如果我们运行上面的代码,它将生成以下输出
将任何子数组的所有元素与X相乘后最大化子数组和是: 21