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 等)中编写。我们希望您觉得本教程有所帮助。
广告