Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค่า OR สูงสุดของอาร์เรย์ย่อยของสองอาร์เรย์ที่ต่างกันใน C++


คำชี้แจงปัญหา

กำหนดจำนวนเต็มบวกสองอาร์เรย์ เลือกอาร์เรย์ย่อยสองอาร์เรย์ที่มีขนาดเท่ากันจากแต่ละอาร์เรย์ และคำนวณผลรวม OR สูงสุดที่เป็นไปได้ของอาร์เรย์ย่อยทั้งสอง

ตัวอย่าง

ถ้า arr1[] ={1, 2, 4, 3, 2} และ

Arr2[] ={1, 3, 3, 12, 2} ผลลัพธ์สูงสุดจะได้รับเมื่อเราสร้างอาร์เรย์ย่อยสองชุดต่อไปนี้ -

Subarr1[] ={2, 4, 3} และ

Subarr2[] ={3, 3, 12}

อัลกอริทึม

เราสามารถใช้สูตรด้านล่างเพื่อให้ได้ผลลัพธ์ -

f(a, 1, n) + f(b, 1, n)

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int getMaximumSum(int *arr1, int *arr2, int n) {
   int sum1 = 0;
   int sum2 = 0;
   for (int i = 0; i < n; ++i) {
      sum1 = sum1 | arr1[i];
      sum2 = sum2 | arr2[i];
   }
   return sum1 + sum2;
}
int main() {
   int arr1[] = {1, 2, 4, 3, 2};
   int arr2[] = {1, 3, 3, 12, 2};
   int n = sizeof(arr1) / sizeof(arr1[0]);
   cout << "Maximum result = " << getMaximumSum(arr1, arr2, n) << endl;
   return 0;
}

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

Maximum result = 22