ในปัญหานี้ เราได้รับอาร์เรย์ตัวเลข N หน้าที่ของเราคือตรวจสอบว่าตัวเลขนั้นเป็น เลขร้ายหรือเลขแปลก
เลขร้าย: เป็นจำนวนบวกซึ่งมีเลขคู่เท่ากับ 1 ในการขยายฐานสอง
ตัวอย่าง: 5, 17
จำนวนที่น่ารังเกียจ: เป็นจำนวนบวกที่มีเลข 1 เป็นเลขคี่ในการขยายไบนารี
ตัวอย่าง : 4, 6
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: ไม่มี =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