卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章64334本站已运行4115

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

  • 循环将运行到 n-1。 p>

结论

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

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

卓越飞翔博客
上一篇: 如何在Python的Plotly中为每个不同的子图应用不同的标题?
下一篇: 按字典顺序最大的字符串,其字符之和等于N
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏