在 C++ 中将任何子数组的所有元素与 X 相乘后最大化子数组和

我们得到了一个整数数组和一个整数变量,即“X”。任务是首先从给定的数组中形成子数组,然后将子数组的所有元素与整数 X 相乘。最后找出将贡献最大和的元素。

让我们看看这个的各种输入输出场景 -

在- int arr[] = {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 返回的最大子数组和。

在   - int arr[] = {-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)

    • 将数组声明为 int arr_2[size][3] 并将临时变量声明为 temp 为 0。

    • 使用memset()C++ 中的方法用 -1 初始化数组 'arr_2' 的所有元素。

    • 从 i 到 0 开始循环 FOR 直到数组的大小。在循环内,将 temp 设置为对函数 max(temp, check(i, 0, arr, arr_2, size, x)) 的调用

    • 返回温度。

  • 函数内部 int check(int first, int last, int arr[], int arr_2[Max_size][3], int size, int x)

    • 将临时变量声明为计数为 0。

    • 首先检查 IF = size 然后返回 0

    • 检查是否 arr_2[first][last] != -1 然后返回 arr_2[first][last]。

    • 检查 IF last = 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))

    • ELSE IF check 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))

    • 否则,将计数设置为 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

以上是 在 C++ 中将任何子数组的所有元素与 X 相乘后最大化子数组和 的全部内容, 来源链接: utcz.com/z/358376.html

回到顶部