Computer >> Máy Tính >  >> Lập trình >> C ++

Tìm số chỉ có các bit được đặt giữa chỉ số L-thứ và R bằng cách sử dụng C ++

Trong bài toán đã cho, chúng ta cần tìm giá trị của một số có tất cả các bit được đặt giữa phạm vi cho trước L, R. Ví dụ -

Input: L = 1, R = 5
Output: 62
Explanation: representation of given L and R in binary form is 0..0111110

Input: L = 1, R = 4
Output: 30
Explanation: representation of given L and R in binary form is 0..11110

Phương pháp tiếp cận để tìm ra giải pháp

Trong bài toán đã cho, chúng ta sẽ thảo luận về hai cách tiếp cận, Cách tiếp cận vũ phu và Cách tiếp cận hiệu quả.

Lực lượng vũ phu

Trong cách tiếp cận này, chúng tôi chỉ đơn giản là sẽ đi qua phạm vi đã cho và cộng tất cả lũy thừa của 2 trong phạm vi đã cho và đó sẽ là câu trả lời của chúng tôi.

Ví dụ

#include<bits/stdc++.h>
using namespace std;
int main() {
   int L = 1, R = 3; // the given range
   int ans = 0; // our answer
   for(int i = L; i <= R; i++) // traversing through the whole range
      ans += pow(2, i); // adding values to the answer.
   cout << ans << "\n";
}

Đầu ra

14

Trong cách tiếp cận này, chúng tôi chỉ đơn giản là duyệt qua phạm vi và chỉ cần cộng lũy ​​thừa của 2 trong số các số trong phạm vi. Chương trình này có độ phức tạp về thời gian là O (N) , trong đó N là kích thước của phạm vi của chúng ta. Nhưng chúng ta có thể cải thiện hơn nữa độ phức tạp về thời gian bằng cách áp dụng kiến ​​thức về các bit trong câu hỏi đã cho.

Phương pháp tiếp cận hiệu quả

Trong cách tiếp cận này, chúng tôi sẽ đơn giản tạo ra một công thức sẽ tính toán câu trả lời của chúng tôi cho chúng tôi.

Ví dụ

#include<bits/stdc++.h>
using namespace std;
int main() {
   int L = 1, R = 3; // the given range
   int ans = 0; // our answer
   for(int i = L; i <= R; i++) // traversing through the whole range
      ans += pow(2, i); // adding values to the answer.
   cout << ans << "\n";
}

Đầu ra

14

Trong cách tiếp cận này, chúng tôi đưa ra một công thức để tính toán câu trả lời của chúng tôi.

Giải thích về đoạn mã trên

Như bạn đã biết, chúng ta cần tính số có các bit được đặt trong phạm vi đã cho, vì vậy trong cách tiếp cận này, chúng ta tìm một số có tất cả các bit của nó được đặt cho đến R từ 0. Sau đó, chúng ta cần trừ một số có tất cả các bit đặt từ 1 đến (L-1), và do đó chúng tôi hình thành quan sát này. Độ phức tạp về thời gian tổng thể của mã đã cho là O (1) là độ phức tạp về thời gian không đổi, nghĩa là chúng ta có thể tính toán bất kỳ câu trả lời nào trong thời gian không đổi.

Kết luận

Bài viết này sẽ tạo một chương trình cho “Số chỉ có bit đặt giữa L-th và R-chỉ mục.” Chúng tôi cũng đã học chương trình C ++ cho vấn đề này và cách tiếp cận hoàn chỉnh (Bình thường và hiệu quả) mà chúng tôi đã giải quyết vấn đề này. Chúng ta có thể viết cùng một chương trình bằng các ngôn ngữ khác như C, java, python và các ngôn ngữ khác. Chúng tôi hy vọng bạn thấy bài viết này hữu ích.