ホームページ  >  記事  >  バックエンド開発  >  C++ では、2 進数の 1 ビットを削除して最大値を取得します。

C++ では、2 進数の 1 ビットを削除して最大値を取得します。

PHPz
PHPz転載
2023-09-17 15:53:081128ブラウズ

C++ では、2 進数の 1 ビットを削除して最大値を取得します。

指定された 2 進数の問題について話し合います。

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] == &#39;0&#39; && flag == false) {
            flag = true;
            continue;
        }
        else
            res[j++] = str[i];
    }
    // printing the resulting string.
    cout << "Maximum number: " << res;
    return 0;
}

出力

Maximum number: 111

上記のコードの説明

  • フラグ変数を使用して、0 が 1 つだけ削除されるようにします。

  • 結果番号を格納するために文字配列 res を初期化します。

  • 元の数値より 1 つ少ない要素を保存する必要があるため、ループは n-1 まで実行されます。

  • #ループは n-1 まで実行されます。 p>

結論

このチュートリアルでは、1 桁を削除した後の最大数を見つける方法について説明しました。私たちはこの問題を解決する 2 つの方法について話し合いました。

このために C コードも作成しました。これらのコードは、C、Java、Python などの他の言語で作成できます。このチュートリアルがお役に立てば幸いです。

以上がC++ では、2 進数の 1 ビットを削除して最大値を取得します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。