เราได้รับอาร์เรย์จำนวนเต็มและภารกิจคือการนับจำนวนคู่ทั้งหมดที่สามารถเกิดขึ้นได้โดยใช้ค่าอาร์เรย์ที่กำหนดเพื่อให้การดำเนินการ OR บนคู่จะส่งผลให้เกิดค่า น้อยกว่าค่า MAX ในคู่ที่กำหนด
ตารางความจริงสำหรับการดำเนินการ OR แสดงไว้ด้านล่าง
A | B | AVB |
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
ป้อนข้อมูล − int arr[] ={2, 5, 1, 8, 9}
ผลผลิต − จำนวนคู่ที่มีค่าบิต OR น้อยกว่า Max คือ − 3
คำอธิบาย −
X | Y | X V Y |
2 | 5 | 7>5=FALSE |
2 | 1 | 3>2=FALSE |
2 | 8 | 10>8=FALSE |
2 | 9 | 11>9=FALSE |
5 | 1 | 5=5 TRUE |
5 | 8 | 13>8=FALSE |
5 | 9 | 13>9=FALSE |
1 | 8 | 9>8=FALSE |
1 | 9 | 10>9=FALSE |
8 | 9 | 9=9=TRUE |
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
ป้อนอาร์เรย์ขององค์ประกอบจำนวนเต็มเพื่อสร้างคู่
-
คำนวณขนาดของอาร์เรย์ที่ส่งข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป
-
สร้างการนับตัวแปรชั่วคราวเพื่อเก็บคู่ที่เกิดจากการดำเนินการ OR ซึ่งมีค่าน้อยกว่าหรือเท่ากับค่า MAX ระหว่างคู่
-
เริ่มวนรอบ FOR จาก i ถึง 0 จนถึง size-1 ของอาร์เรย์
-
ภายในลูป เริ่มวนใหม่ FOR จาก j ถึง i+1 จนถึงขนาดอาร์เรย์
-
ภายในลูป ให้ตรวจสอบ IF arr[i] | arr[j] <=max(arr[i], arr[j]) จากนั้นเพิ่มจำนวนขึ้น 1
-
คืนจำนวน
-
พิมพ์ผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //Count pairs with bitwise OR less than Max int Pair_OR(int arr[], int size){ int count = 0; for (int i = 0; i lt; size - 1; i++){ for (int j = i + 1; j lt; size; j++){ if ((arr[i] | arr[j]) lt;= max(arr[i], arr[j])){ count++; } } } return count; } int main(){ int arr[] = { 4, 8, 9, 10, 23}; int size = sizeof(arr) / sizeof(arr[0]); cout<<"Count of pairs with bitwise OR less than Max are: "<<Pair_OR(arr, size); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of pairs with bitwise OR less than Max are − 3