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,因为我们需要存储比原始数字少一个的元素。

结论

在本教程中,我们讨论了在从中删除一位后找到最大数字的方法。我们讨论了两种解决此问题的方法。

我们还为此编写了 C++ 代码,我们可以在其他任何语言(如 C、Java、Python 等)中编写。我们希望您觉得本教程有所帮助。

更新于: 2021 年 11 月 26 日

420 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告