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

ค้นหาจำนวนที่มากที่สุดด้วย n set และ m unset bit ใน C++


ในปัญหานี้ เราได้รับค่าจำนวนเต็มสองค่า n และ m งานของเราคือ หาจำนวนที่มากที่สุดด้วย n set และ m unset bits ในการแสดงเลขฐานสองของตัวเลข

มาดูตัวอย่างเพื่อทำความเข้าใจปัญหา

Input : n = 3, m = 1
Output : 14

คำอธิบาย

Largest number will have 3 set bits and then 1 unset bit.
(1110)2 = 14

แนวทางการแก้ปัญหา

วิธีแก้ปัญหาง่ายๆ คือ การหาจำนวนที่ประกอบด้วย (n+m) set bits จากหมายเลขนี้ ให้ปิด m บิตจากจุดสิ้นสุด (LSB) ในการสร้างตัวเลขด้วย (n+m) ชุดบิต

$$(1\ll(n+m))-1$$

จากนั้นสลับ m บิตแล้วส่งคืนหมายเลข

ตัวอย่าง

โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา

#include <iostream>
using namespace std;
int findlargestNumber(int n, int m){
   int maxNum = (1 << (n + m)) - 1;
   if (m == 0)
      return maxNum;
   int number = (1 << m) - 1;
   return (maxNum ^ number);
}
int main(){
   int n = 5,
   m = 2;
   cout<<"The largest number with "<<n<<" set bits and "<<m<<" unset bits is "<<findlargestNumber(n, m);
   return 0;
}

ผลลัพธ์

The largest number with 5 set bits and 2 unset bits is 124