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