เราคือตัวเลข 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