Convierta 0 a N sumando 1 o multiplicando por 2 en pasos mínimos

Dado un entero positivo N , la tarea es encontrar el número mínimo de operaciones de suma requeridas para convertir el número 0 en N , de modo que en cada operación cualquier número pueda multiplicarse por 2 o agregarle el valor 1 .

Ejemplos: 

Entrada: N = 6
Salida: 1
Explicación: Las
siguientes son las operaciones realizadas para convertir 0 a 6:
Sumar 1 –> 0 + 1 = 1.
Multiplicar 2 –> 1 * 2 = 2.
Sumar 1 –> 2 + 1 = 3 Multiplica 2 – 
> 3 * 2 = 6.
Por lo tanto número de operaciones de suma = 2.  

Entrada: N = 3
Salida: 2

Enfoque: este problema se puede resolver utilizando la técnica de manipulación de bits . En la representación de números binarios de N , mientras opera cada bit cada vez que N se vuelve impar (eso significa que se establece el bit menos significativo de N ), luego realice la operación de suma . De lo contrario, multiplique por 2 . La lógica final del problema dado es encontrar el número de bits establecidos en N .

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ program for above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to count number of
// set bits in N
int minimumAdditionOperation(
    unsigned long long int N)
{
 
    // Stores the count of set bits
    int count = 0;
 
    while (N) {
 
        // If N is odd, then it
        // a set bit
        if (N & 1 == 1) {
            count++;
        }
        N = N >> 1;
    }
 
    // Return the result
    return count;
}
 
// Driver Code
int main()
{
    int N = 6;
    cout << minimumAdditionOperation(N);
 
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
class GFG {
 
    // Function to count number of
    // set bits in N
    static int minimumAdditionOperation(int N)
    {
 
        // Stores the count of set bits
        int count = 0;
 
        while (N > 0) {
 
            // If N is odd, then it
            // a set bit
            if (N % 2 == 1) {
                count++;
            }
            N = N >> 1;
        }
 
        // Return the result
        return count;
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int N = 6;
        System.out.println(minimumAdditionOperation(N));
    }
}
 
// This code is contributed by dwivediyash

Python3

# python program for above approach
 
# Function to count number of
# set bits in N
def minimumAdditionOperation(N):
 
    # Stores the count of set bits
    count = 0
 
    while (N):
 
        # If N is odd, then it
        # a set bit
        if (N & 1 == 1):
            count += 1
 
        N = N >> 1
 
    # Return the result
    return count
 
# Driver Code
if __name__ == "__main__":
 
    N = 6
    print(minimumAdditionOperation(N))
 
    # This code is contributed by rakeshsahni.

C#

// C# program for above approach
using System;
public class GFG{
     
    // Function to count number of
    // set bits in N
    static int minimumAdditionOperation(int N)
    {
     
        // Stores the count of set bits
        int count = 0;
     
        while (N != 0) {
     
            // If N is odd, then it
            // a set bit
            if ((N & 1) == 1) {
                count++;
            }
            N = N >> 1;
        }
     
        // Return the result
        return count;
    }
     
    // Driver Code
    static public void Main (){
        int N = 6;
        Console.Write(minimumAdditionOperation(N));
     
    }
}
 
// This code is contributed by AnkThon

Javascript

<script>
// Javascript program for above approach
 
// Function to count number of
// set bits in N
function minimumAdditionOperation(N)
{
 
  // Stores the count of set bits
  let count = 0;
 
  while (N)
  {
   
    // If N is odd, then it
    // a set bit
    if (N & (1 == 1)) {
      count++;
    }
    N = N >> 1;
  }
 
  // Return the result
  return count;
}
 
// Driver Code
let N = 6;
document.write(minimumAdditionOperation(N));
 
// This code is contributed by saurabh_jaiswal.
</script>
Producción: 

2

 

Complejidad temporal: O(log N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por vivekvarshney40hd y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *