คำชี้แจงปัญหา
กำหนดหมายเลข N ภารกิจคือการค้นหาจำนวนองค์ประกอบขั้นต่ำที่จะลบออกระหว่างเป็น N เพื่อให้ XOR ที่ได้รับจากองค์ประกอบที่เหลือมีค่าสูงสุด
อัลกอริทึม
<ก่อน>1. ถ้า n เป็น 1 หรือ 2 ก็ไม่จำเป็นต้องลบองค์ประกอบใด ๆ ดังนั้นคำตอบคือศูนย์2 หาจำนวนที่ยกกำลัง 2 และมากกว่าหรือเท่ากับ ให้เราเรียกหมายเลขนี้ว่า nextNumber 2.1 ถ้า n ==nextNumber หรือ n ==(nextNumber – 1) คำตอบคือ 1 2.2 ถ้า n =(nextNumber -2) คำตอบคือ 03 ถ้า n เป็นเลขคู่ คำตอบก็คือ 1 ไม่เช่นนั้น 2ตัวอย่าง
#includeใช้เนมสเปซ std;int nextPowerOf2(int n){ if (n &&!(n &(n - 1))) { return n; } int cnt =0; ในขณะที่ (n) { n =n / 2; ++cnt; } return (1 < ผลลัพธ์
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -
หมายเลขที่จะลบ =1 วินาที