เราคือตัวเลข N เป้าหมายคือการหาตัวเลขระหว่าง 0 ถึง N ซึ่ง OR กับ N เท่ากับ XOR กับ N
เราจะทำสิ่งนี้โดยข้ามหมายเลข จาก i=0 ถึง i<=N และสำหรับแต่ละ i ถ้า (N^i==i | N) ให้นับเพิ่มขึ้น
ให้เราเข้าใจด้วยตัวอย่าง
ป้อนข้อมูล − X=6
ผลผลิต − การนับจำนวนที่มี OR กับ N ==XOR กับ N:2
คำอธิบาย - ตัวเลขคือ 0 1.
ป้อนข้อมูล − X=20
ผลผลิต − การนับจำนวนที่มี OR กับ N ==XOR กับ N:8
คำอธิบาย − ตัวเลขคือ 0 1 2 3 8 9 10 11
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราหาจำนวนเต็ม N.
-
ฟังก์ชัน orisXOR(int n) รับ n และส่งกลับจำนวนตัวเลขที่มี OR ที่มีค่า n เท่ากับ XOR ที่มี n
-
นับเริ่มต้นเป็น 0
-
ข้ามจาก i=0 ไปยัง i<=n.
-
ถ้า i|n==i^n จำนวนที่เพิ่มขึ้น
-
เมื่อสิ้นสุด for loop count จะได้ผลลัพธ์ที่ต้องการ
-
นับคืนและพิมพ์
ตัวอย่าง
#include <bits/stdc++.h> #include <math.h> using namespace std; int orisXOR(int n){ int count = 0; for (int i = 0; i <= n; i++){ if((n|i)==(i^n)) { count++; } } return count; } int main(){ int N = 15; int nums=orisXOR(N); cout <<endl<<"Count of numbers whose OR with N == XOR with N: "<<nums; return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Count of numbers whose OR with N == XOR with N: 1