Cho một số N. Mục tiêu là tìm các số từ 0 đến N mà phép OR với N bằng phép XOR với N.
Ta thực hiện bằng cách duyệt số từ i=0 đến i<=N và với mỗi i, nếu (N|i)==(i^N) thì tăng biến đếm.
Hãy hiểu qua các ví dụ.
Đầu vào − X=6
Đầu ra − Số lượng số có OR với N == XOR với N: 2
Giải thích − Các số là 0, 1.
Đầu vào − X=20
Đầu ra − Số lượng số có OR với N == XOR với N: 8
Giải thích − Các số là 0, 1, 2, 3, 8, 9, 10, 11
Phương pháp sử dụng trong chương trình dưới đây
- Nhận số nguyên N.
- Hàm
orisXOR(int n)nhận n và trả về số lượng số có OR với n bằng XOR với n. - Khởi tạo biến count = 0.
- Duyệt từ i=0 đến i<=n.
- Nếu
i|n == i^n. Tăng count. - Sau vòng lặp count sẽ chứa kết quả mong muốn.
- Trả về count và in ra.
Ví dụ
#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 << "Số lượng số có OR với N == XOR với N: " << nums;
return 0;
}
Đầu ra
Nếu chạy mã trên sẽ cho kết quả sau:
Số lượng số có OR với N == XOR với N: 1