Trong bài toán này, chúng ta có hai giá trị nguyên, n và m. Nhiệm vụ của chúng ta là tìm số lớn nhất có n bit được đặt và m bit chưa được đặt trong biểu diễn nhị phân của số.
Hãy lấy một ví dụ để hiểu vấn đề
Input : n = 3, m = 1 Output : 14
Giải thích -
Largest number will have 3 set bits and then 1 unset bit. (1110)2 = 14
Phương pháp tiếp cận giải pháp
Một giải pháp đơn giản cho vấn đề là tìm số bao gồm (n + m) các bit được thiết lập. Từ số này, tắt m bit từ cuối (LSB). Để tạo một số với (n + m) các bit được đặt,
$$ (1 \ ll (n + m)) - 1 $$
Sau đó chuyển đổi m bit và trả về số.
Ví dụ
Chương trình minh họa hoạt động của giải pháp của chúng tôi
#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;
} Đầu ra
The largest number with 5 set bits and 2 unset bits is 124