Kiểm tra số N có số bit 1 (set bits) bằng số bit 0 (unset bits) trong biểu diễn nhị phân (không tính leading zeros).
Ví dụ: 12 = 1100₂ (2 bit 1, 2 bit 0) → Có. 35 = 100011₂ (3 bit 1, 3 bit 0) → Có.
Chương trình C++
#include <iostream>
#include <bitset>
using namespace std;
bool equalSetUnsetBits(int n) {
if (n == 0) return false; // 0 = "0" -> 0 bit 1, 1 bit 0
int set = 0, unset = 0;
while (n > 0) {
if (n & 1) set++; else unset++;
n >>= 1;
}
return set == unset;
}
int main() {
vector test = {12, 35, 10, 5, 3, 6, 9, 0};
for (int n : test) {
cout << n << " (" << bitset<8>(n) << ") -> "
<< (equalSetUnsetBits(n) ? "Bang nhau" : "Khac nhau") << "\n";
}
return 0;
}
Kết quả
12 (00001100) -> Bang nhau 35 (00100011) -> Bang nhau 10 (00001010) -> Bang nhau 5 (00000101) -> Khac nhau 3 (00000011) -> Khac nhau 6 (00000110) -> Bang nhau 9 (00001001) -> Bang nhau 0 (00000000) -> Khac nhau