Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค่า XOR สูงสุดของคู่จากช่วงใน C++


คำชี้แจงปัญหา

เมื่อกำหนดช่วง [L, R] เราจำเป็นต้องค้นหาจำนวนเต็มสองตัวในช่วงนี้ โดยที่ XOR ของพวกมันจะสูงสุดในบรรดาตัวเลือกที่เป็นไปได้ทั้งหมดของจำนวนเต็มสองจำนวน

หากช่วงที่กำหนดคือ L =1 และ R =21 เอาต์พุตจะเป็น 31 เนื่องจาก −31 คือ XOR ของ 15 และ 16 และมีค่าสูงสุดภายในช่วง

อัลกอริทึม

<ก่อน>1. คำนวณค่า (L^R)2 จากบิตที่สำคัญที่สุดของค่านี้ ให้บวก 1 ทั้งหมดเพื่อให้ได้ผลลัพธ์สุดท้าย

ตัวอย่าง

#include ใช้เนมสเปซ std;int getMaxXOR(int L, int R){ int LXR =L ^ R; int msbPos =0; ในขณะที่ (LXR) { msbPos ++; LXR>>=1; } int maxXOR =0; int สอง =1; ในขณะที่ (msbPos--) { maxXOR +=สอง; สอง <<=1; } ส่งคืน maxXOR;}int main(){ int L =1; int R =21; ศาล <<"ผลลัพธ์ =" < 

ผลลัพธ์

เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ต่อไปนี้ -

ผลลัพธ์ =31