首頁 > 後端開發 > C++ > 在C++中,將一個二進制數的一位移除以獲得最大值

在C++中,將一個二進制數的一位移除以獲得最大值

PHPz
發布: 2023-09-17 15:53:08
轉載
1156 人瀏覽過

在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] == &#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。

  • 初始化字元陣列 res 來儲存結果數。

  • 循環將運行到 n-1,因為我們需要儲存比原始數字少一個元素。

  • 循環將運行到 n-1。 p>

結論

在本教學中,我們討論了刪除一位後找到最大數字。我們討論了解決此問題的兩種方法。

我們也為此編寫了 C 程式碼,我們可以用任何其他語言(如 C、Java、Python 等)編寫這些程式碼。我們希望本教學對您有所幫助。

以上是在C++中,將一個二進制數的一位移除以獲得最大值的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板