Cho số N. Nhiệm vụ: kiểm tra N là số Evil hay số Odious.
Số Evil: Số dương có số bit 1 trong nhị phân là chẵn. VD: 5 (101), 17 (10001).
Số Odious: Số dương có số bit 1 trong nhị phân là lẻ. VD: 4 (100), 6 (110).
Ví dụ:
Đầu vào: N = 65
Đầu ra: Evil Number
Giải thích: 65 nhị phân = 1000001 (hai bit 1).
Phương pháp giải
Chuyển sang nhị phân, đếm bit 1. Chẵn => Evil, lẻ => Odious.
Chương trình minh họa
Ví dụ
#include <iostream>
using namespace std;
int isEvilNumber(int n) {
int count = 0;
while (n != 0) {
int r = n % 2;
if (r == 1)
count++;
n = n / 2;
}
if (count % 2 == 0)
return 1;
else
return 0;
}
int main(void) {
int num = 2049;
if (isEvilNumber(num))
cout << "The number " << num << " is an Evil Number";
else
cout << "The number " << num << " is an Odious Number";
return 0;
}
Kết quả
The number 2049 is an Evil Number