ในบทความนี้ เราจะพูดถึงการนับจำนวนแฝดสามที่ไม่ซ้ำ (x, y, z) ในอาร์เรย์ของจำนวนเฉพาะที่กำหนดโดยที่ XOR ของพวกมันเป็น 0 ดังนั้น แฝดสามควรไม่ซ้ำกันโดยที่องค์ประกอบทั้งสามนั้นไม่ซ้ำกัน และจะนับทั้งหมด การรวมกันของแฝดสาม เช่น −
Input : arr[ ] = { 5, 6, 7, 1, 3 }
Output : 2
Explanation : triplets are { 5, 6, 3 } and { 6, 7, 1 } whose XOR is zero.
Input : arr[ ] = { 3, 6, 8, 1, 5, 4 , 12}
Output : 3
Explanation : Triplets are { 3, 6, 5 }, { 1, 5, 4 } and { 4, 8, 12 } whose XOR is zero. แนวทางในการหาทางออก
เรารู้ว่า XOR มีค่าเท่ากันจะให้ศูนย์เสมอ ดังนั้นเราจึงพบแฝดสามที่ไม่ซ้ำกัน ซึ่งสามารถใช้แนวทางในแง่ดีได้ ซึ่งก็คือการค้นหา XOR ของสองค่าจากอาร์เรย์และจัดเก็บผลลัพธ์ และการค้นหาค่าที่เท่ากับผลลัพธ์ในอาร์เรย์ นอกจากนี้ ค่าของผลลัพธ์ไม่ควรเท่ากับค่าใดๆ ที่เป็นคู่ มองหา
ตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
int main () {
int arr[] = { 3, 6, 8, 1, 5, 4, 12 };
int n = sizeof (arr) / sizeof (arr[0]);
int result;
// count variable to keep count of pairs.
int count = 0;
// creating a set to store unique numbers .
unordered_set < int >values;
// inserting values in set.
for (int i = 0; i < n; i++)
values.insert (arr[i]);
// traverse for all pairs to calculate XOR.
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) { // finding xor of i, j pair.
int XR = arr[i] ^ arr[j];
// checking if XOR value of pair present in array
// and value should not be in pairs.
if (values.find (XR) != values.end () && XR != arr[i] &&
XR != arr[j])
count++;
}
}
// storing result
result = count / 3;
cout << "Number of unique triplets : " << result;
return 0;
} ผลลัพธ์
Number of unique triplets : 3
คำอธิบายของโค้ดด้านบน
- การสร้างชุด unordered_set
values; เพื่อจัดเก็บหมายเลขเฉพาะของอาร์เรย์ที่กำหนด - การใช้ for() วนซ้ำเพื่อแทรกค่าในชุดโดยใช้ values.insert (arr[i])
- ใช้สองลูปที่ซ้อนกันเพื่อสำรวจคู่ทั้งหมดและคำนวณค่า XOR ของพวกมัน
- จากนั้น ค้นหาค่า XOR ในอาร์เรย์และเพิ่มจำนวนหากพบค่าในอาร์เรย์และไม่ใช่เป็นคู่
- การจัดเก็บผลลัพธ์เป็นจำนวน / 3 จะนับชุดค่าผสมสามชุดของแฝดสาม และเราต้องการชุดค่าผสมสามชุดที่ไม่ซ้ำกัน
บทสรุป
บทความนี้กล่าวถึงการหาจำนวนแฝดที่มีค่า XOR 0; เราได้พูดคุยถึงแนวทางการมองโลกในแง่ดีเพื่อค้นหาแฝดสามตัวที่ไม่เหมือนใคร เรายังพูดถึงโปรแกรม C++ เพื่อแก้ปัญหา อย่างไรก็ตาม เราสามารถเขียนโปรแกรมนี้ในภาษาการเขียนโปรแกรมอื่นๆ เช่น Java, C, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์