คำชี้แจงปัญหา
กำหนดหมายเลขที่ไม่ได้ลงนาม ให้ค้นหาจำนวนขั้นต่ำที่สามารถเกิดขึ้นได้โดยใช้บิตของหมายเลขที่ไม่ได้ลงนามที่ให้ไว้
ตัวอย่าง
หากอินพุต =10 คำตอบจะเป็น 3
การแทนค่าไบนารีของ 10 คือ 1010 และจำนวนขั้นต่ำที่มี 2 ชุดบิตคือ 0011 เช่น 3
อัลกอริทึม
<ก่อน>1. นับจำนวนชุดบิต2. (จำนวนชุดบิต) ^ 2 – 1 หมายถึงจำนวนที่ย่อเล็กสุด)ตัวอย่าง
#includeใช้เนมสเปซ std;int getSetBits(int n) { int cnt =0; ในขณะที่ (n) { ++cnt; n =n &(n - 1); } ส่งคืน cnt;}int getMinNumber(int n){ int bits =getSetBits(n); return pow(2, bits) - 1;}int main() { int n =10; cout <<"จำนวนขั้นต่ำ =" < เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้
ผลลัพธ์
จำนวนขั้นต่ำ =3