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

ค้นหาจำนวนแฝดที่ไม่ซ้ำที่มี XOR เป็นศูนย์โดยใช้ C++


ในบทความนี้ เราจะพูดถึงการนับจำนวนแฝดสามที่ไม่ซ้ำ (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 เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์