指定された 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] == '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 が 1 つだけ削除されるようにします。
結果番号を格納するために文字配列 res を初期化します。
元の数値より 1 つ少ない要素を保存する必要があるため、ループは n-1 まで実行されます。
以上がC++ では、2 進数の 1 ビットを削除して最大値を取得します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。