Cho một số N. Mục tiêu là tìm các số từ 0 đến N mà hiệu 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ó hiệu với N == XOR với N: 4
Giải thích − Các số là 0, 2, 4, 6.
Đầu vào − X=20
Đầu ra − Số lượng số có hiệu với N == XOR với N: 4
Giải thích − Các số là 0, 4, 16, 20
Phương pháp sử dụng trong chương trình dưới đây
- Nhận số nguyên N.
- Hàm
diffisXOR(int n)nhận n và trả về số lượng số có hiệu 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 (Lưu ý: code gốc có lỗi biến x, nên sửa thành n). - 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 diffisXOR(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 = diffisXOR(N);
cout << endl << "Số lượng số có hiệu 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ó hiệu với N == XOR với N: 16