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

Tổng tối đa bằng cách chọn các phần tử từ hai mảng theo thứ tự trong Chương trình C ++

Trong bài toán này, chúng ta được cung cấp hai mảng arr1 [] và arr2 [], và hai sốN và M.

N là số phần tử được lấy từ arr1.

M là số phần tử được lấy từ arr2.

Chúng ta cần chọn một trong các phần tử từ arr1 [i] đến arr2 [i], mà

làm cho tổng lớn nhất, nhưng N tối đa có thể được lấy từ arr1 và Mfrom arr2.

Nhiệm vụ của chúng tôi là tạo một chương trình để tìm tổng lớn nhất bằng cách chọn các phần tử từ hai mảng theo thứ tự trong C ++.

Hãy lấy một ví dụ để hiểu vấn đề,

Đầu vào

arr1[] = {5, 1, 6, 2, 8, 9}
arr2[] = {8, 4, 7, 9, 1, 3}
M = 3, N = 2

Đầu ra

28

Giải thích

Here are the elements to be picked,
i = 0, arr1[0] = 5, arr2[0] = 8.Element to be taken 8
i = 1, arr1[1] = 1, arr2[1] = 4.Element to be taken 4
i = 2, arr1[2] = 6, arr2[2] = 7.Element to be taken 6
i = 3, arr1[3] = 2, arr2[3] = 9.Element to be taken 2
i = 4, arr1[4] = 8, arr2[0] = 1.Element to be taken 8

maxSum = 8 + 4 + 6 + 2 + 8 = 28

Phương pháp tiếp cận giải pháp

Để giải quyết vấn đề, mỗi giải pháp là tìm phần tử lớn nhất củaarr1 và arr2, cho đến khi số phần tử đạt đến M hoặc N. Và sau đó cộng tất cả các giá trị để tìm tổng.

Thuật toán

Khởi tạo -

maxSum = 0

Bước 1 -

for i −> 0 to n

Bước 1.1 -

if arr1[i] > arr2[i] and M >= 0 −> maxSum += arr1[i].

Bước 1.2 -

else if arr1[i] < arr2[i] and N >= 0 −> maxSum += arr2[i].

Bước 1.3 -

else exit.

Bước 3 -

return maxSum

Ví dụ

Chương trình minh họa hoạt động của giải pháp của chúng tôi,

#include<iostream>
using namespace std;
int calcMaxSumFromArrays(int arr1[], int arr2[], int N, int M, int size1, int size2) {
   int maxSum = 0;
   for(int i = 0; i < size1; i++){
      if(arr1[i] > arr2[i] && N > 0){
         maxSum += arr1[i];
         N−−;
      }
      else if(arr1[i] <= arr2[i] && M > 0){
         maxSum += arr2[i];
         M−−;
      }
      else if(M > 0){
         maxSum += arr2[i];
         M−−;
      }
      else if(N > 0){
         maxSum += arr1[i];
         N−−;
      }
      else
      return maxSum;
   }
   return maxSum;
}
int main() {
   int arr1[]= {5, 1, 6, 2, 8, 9};
   int arr2[]= {8, 4, 7, 9, 1, 3};
   int N = 3, M = 2;
   int size1 = sizeof(arr1)/sizeof(arr1[0]);
   int size2 = sizeof(arr2)/sizeof(arr2[0]);
   cout<<"The maximum sum by picking elements from two arrays in
   order is "<<calcMaxSumFromArrays(arr1, arr2, N, M, size1, size2);
   return 0;
}

Đầu ra

The maximum sum by picking elements from two arrays in order is 28