Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 최대값을 얻기 위해 이진수에서 한 비트 제거

<시간/>

이진수가 주어진 문제에 대해 토론하십시오. 나머지 숫자가 다른 모든 옵션의 최대값이 되도록 약간 제거해야 합니다. 예를 들면

Input : N = 1011
Output: 111
Explanation: We need to remove one bit so removing 0 bit will give a maximum number than removing any 1’s bit. 111 > 101, 011.

Input: 111
Output: 11
Explanation: Since all the bits are 1 so we can remove any bit.

해결책을 찾기 위한 접근 방식

무차별 대입 방식

무차별 대입을 적용하면 최대 결과 값이 제공됩니다. 즉, 각 비트를 하나씩 제거하고 다른 결과를 비교하여 최대 결과를 얻습니다.

그러나 하나의 효율적인 접근 방식이 있습니다. 즉, 최소 중복 비트를 제거하는 경우 사용할 수 있습니다.

효율적인 접근

효율적인 접근 방식은 결과 수치에 최소한의 영향을 미칩니다.

  • 먼저 오른쪽에서 비트를 통과합니다.

  • 0을 검색하고 첫 번째 카운터에서 제거하십시오.

  • 0이 없으면 비트를 제거합니다.

예시

효율적인 접근을 위한 C++ 코드

#include <bits/stdc++.h>
using namespace std;
int main(){
    string str = "1011";
    bool flag = false;
    int n = str.length();
    // Initialising new array for
    char res[n - 1];
    int j = 0;
    // traversing through the binary number from right.
    for (int i = 0; j < n - 1; i++) {
        // if 0 is found then skip it.
        if (str[i] == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            res[j++] = str[i];
    }
    // printing the resulting string.
    cout << "Maximum number: " << res;
    return 0;
}

출력

Maximum number: 111

위 코드 설명

  • 하나의 0만 제거되도록 플래그 변수를 사용합니다.

  • 결과 숫자를 저장하기 위해 문자 배열 res가 초기화됩니다.

  • 루프는 원래 숫자보다 하나 적은 요소를 저장해야 하기 때문에 n-1까지 실행됩니다.

결론

이 튜토리얼에서 우리는 1비트를 제거한 후 최대 수를 찾는 것에 대해 논의했습니다. 우리는 이 문제를 해결하기 위해 두 가지 접근 방식을 논의했습니다.

우리는 또한 C, Java, Python 등과 같은 다른 언어로 작성할 수 있는 동일한 C++ 코드를 작성합니다. 이 튜토리얼이 도움이 되기를 바랍니다.