📌  相关文章
📜  从二进制数中删除一位即可获得最大值

📅  最后修改于: 2021-05-07 05:05:25             🧑  作者: Mango

给定一个二进制数,任务是从其中精确删除一位,以便在删除之后,所有选项中得到的二进制数最大。

例子:

Input: 110
Output: 11
    As 110 = 6 in decimal, 
    the option is to remove either 0 or 1.
    So the possible combinations are 10, 11
    The max number is 11 = 3 in decimal.  

Input:1001
Output: 101

方法:

  1. 从左到右遍历二进制数。
  2. 找到最少的冗余0位,因为该位对结果二进制数的影响最小。
  3. 跳过此位或将其删除。
  4. 其余位给出最大值二进制数。

下面是上述方法的实现:

程序:

C++
// C++ program to find next maximum binary number
// with one bit removed
  
#include 
using namespace std;
  
// Function to find the maximum binary number
int printMaxAfterRemoval(string s)
{
    bool flag = false;
    int n = s.length();
  
    // Traverse the binary number
    for (int i = 0; i < n; i++) {
  
        // Try finding a 0 and skip it
        if (s[i] == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            cout << s[i];
    }
}
  
// Driver code
int main()
{
  
    // Get the binary number
    string s = "1001";
  
    // Find the maximum binary number
    printMaxAfterRemoval(s);
}


Java
// Java program to find next maximum binary number
// with one bit removed
  
import java.io.*;
  
class GFG {
   
// Function to find the maximum binary number
static int printMaxAfterRemoval(String s)
{
    boolean flag = false;
    int n = s.length();
  
    // Traverse the binary number
    for (int i = 0; i < n; i++) {
  
        // Try finding a 0 and skip it
        if (s.charAt(i) == '0' && flag == false) {
            flag = true;
            continue;
        }
        else
            System.out.print( s.charAt(i));
    }
  return 0;
}
  
// Driver code
    public static void main (String[] args) {
            // Get the binary number
    String s = "1001";
  
    // Find the maximum binary number
    printMaxAfterRemoval(s);
    }
}
// This code is contributed by anuj_67..


Python3
# Python3 program to find next maximum  
# binary number with one bit removed 
  
# Function to find the maximum
# binary number 
def printMaxAfterRemoval(s): 
  
    flag = False
    n = len(s) 
  
    # Traverse the binary number 
    for i in range(0, n): 
  
        # Try finding a 0 and skip it 
        if s[i] == '0' and flag == False: 
            flag = True
            continue
          
        else:
            print(s[i], end = "") 
  
# Driver code 
if __name__ == "__main__":
  
    # Get the binary number 
    s = "1001"
  
    # Find the maximum binary number 
    printMaxAfterRemoval(s) 
  
# This code is contributed 
# by Rituraj Jain


C#
// C# program to find next maximum 
// binary number with one bit removed
using System;
  
class GFG 
{
// Function to find the maximum
// binary number
static int printMaxAfterRemoval(String s)
{
    bool flag = false;
    int n = s.Length;
  
    // Traverse the binary number
    for (int i = 0; i < n; i++)
    {
  
        // Try finding a 0 and skip it
        if (s[i] == '0' && flag == false)
        {
            flag = true;
            continue;
        }
        else
            Console.Write(s[i]);
    }
    return 0;
}
  
  
// Driver Code
static void Main()
{
    // Get the binary number
    String s = "1001";
      
    // Find the maximum binary number
    printMaxAfterRemoval(s);
}
}
  
// This code is contributed by Ryuga.


PHP


输出:
101

时间复杂度: O(n)