从二进制数中删除一位以获得 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();

    // 初始化新数组

    char res[n - 1];

    int j = 0;

    // 从右边遍历二进制数。

    for (int i = 0; j < n - 1; i++) {

        // 如果找到 0,则跳过它。

        if (str[i] == '0' && flag == false) {

            flag = true;

            continue;

        }

        else

            res[j++] = str[i];

    }

    // 打印结果字符串。

    cout << "最大数量: " << res;

    return 0;

}

输出结果
最大数量: 111

以上代码说明

  • 使用标志变量以便仅消除一个 0。

  • 字符数组 res 被初始化以存储结果数。

  • 循环将运行到 n-1,因为我们需要存储比原始数字少一个的元素。

结论

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

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

以上是 从二进制数中删除一位以获得 C++ 中的最大值 的全部内容, 来源链接: utcz.com/z/331677.html

回到顶部