इस समस्या में, हमें एक सरणी एक संख्या N दी गई है। हमारा कार्य जांचना है कि संख्या एविल नंबर या ओडियस नंबर है या नहीं।
एविल नंबर: यह एक धनात्मक संख्या है जिसके बाइनरी विस्तार में 1 की संख्या सम होती है।
उदाहरण: 5, 17
ओडियस नंबर: यह एक धनात्मक संख्या है जिसके बाइनरी विस्तार में 1 की संख्या विषम होती है।
उदाहरण: 4, 6
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: N = 65
आउटपुट: एविल नंबर
व्याख्या:
65 का बाइनरी विस्तार: 1000001
समाधान दृष्टिकोण:
समस्या का एक सरल समाधान संख्या के बाइनरी विस्तार को ढूंढना और फिर विस्तार में 1 की संख्या गिनना है। यदि गिनती सम है तो संख्या एक एविल नंबर है अन्यथा यह एक ओडियस नंबर है।
हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम,
उदाहरण
#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;
}
आउटपुट
The number 2049 is an Evil Number