Encuentra el número más cercano a n y divisible por m

Dados dos enteros n y m . El problema es encontrar el número más cercano a n y divisible por m . Si hay más de un número de este tipo, se genera el que tiene el valor absoluto máximo. Si n es completamente divisible por m , solo genera n . Se requiere la complejidad temporal de O(1).
Restricciones: m != 0
Ejemplos: 
 

Input : n = 13, m = 4
Output : 12

Input : n = -15, m = 6
Output : -18
Both -12 and -18 are closest to -15, but
-18 has the maximum absolute value.

Fuente: experiencia de la entrevista de Microsoft | Conjunto 125 .
 

Encontramos el valor de n/m. Sea este valor q. Entonces encontramos el más cercano de dos posibilidades. Uno es q * m, el otro es (m * (q + 1)) o (m * (q – 1)) dependiendo de si uno de los dos números dados es negativo o no.
Algoritmo: 
 

closestNumber(n, m)
    Declare q, n1, n2
    q = n / m
    n1 = m * q

    if (n * m) > 0
        n2 = m * (q + 1)
    else
        n2 = m * (q - 1)

    if abs(n-n1) < abs(n-n2)
        return n1
    return n2  

C++

// C++ implementation to find the number closest to n
// and divisible by m
#include <bits/stdc++.h>
 
using namespace std;
 
// function to find the number closest to n
// and divisible by m
int closestNumber(int n, int m)
{
    // find the quotient
    int q = n / m;
     
    // 1st possible closest number
    int n1 = m * q;
     
    // 2nd possible closest number
    int n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1));
     
    // if true, then n1 is the required closest number
    if (abs(n - n1) < abs(n - n2))
        return n1;
     
    // else n2 is the required closest number   
    return n2;   
}
 
// Driver program to test above
int main()
{
    int n = 13, m = 4;
    cout << closestNumber(n, m) << endl;
     
    n = -15; m = 6;
    cout << closestNumber(n, m) << endl;
     
    n = 0; m = 8;
    cout << closestNumber(n, m) << endl;
     
    n = 18; m = -7;
    cout << closestNumber(n, m) << endl;
     
    return 0;
}

Java

// Java implementation to find the number closest to n
// and divisible by m
public class close_to_n_divisible_m {
     
    // function to find the number closest to n
    // and divisible by m
    static int closestNumber(int n, int m)
    {
        // find the quotient
        int q = n / m;
          
        // 1st possible closest number
        int n1 = m * q;
          
        // 2nd possible closest number
        int n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1));
          
        // if true, then n1 is the required closest number
        if (Math.abs(n - n1) < Math.abs(n - n2))
            return n1;
          
        // else n2 is the required closest number   
        return n2;   
    }
      
    // Driver program to test above
    public static void main(String args[])
    {
        int n = 13, m = 4;
        System.out.println(closestNumber(n, m));
          
        n = -15; m = 6;
        System.out.println(closestNumber(n, m));
          
        n = 0; m = 8;
        System.out.println(closestNumber(n, m));
          
        n = 18; m = -7;
        System.out.println(closestNumber(n, m));
    }
}
// This code is contributed by Sumit Ghosh

Python3

# Python 3 implementation to find
# the number closest to n
 
# Function to find the number closest
# to n and divisible by m
def closestNumber(n, m) :
    # Find the quotient
    q = int(n / m)
     
    # 1st possible closest number
    n1 = m * q
     
    # 2nd possible closest number
    if((n * m) > 0) :
        n2 = (m * (q + 1))
    else :
        n2 = (m * (q - 1))
     
    # if true, then n1 is the required closest number
    if (abs(n - n1) < abs(n - n2)) :
        return n1
     
    # else n2 is the required closest number
    return n2
     
     
# Driver program to test above
n = 13; m = 4
print(closestNumber(n, m))
 
n = -15; m = 6
print(closestNumber(n, m))
 
n = 0; m = 8
print(closestNumber(n, m))
 
n = 18; m = -7
print(closestNumber(n, m))
 
# This code is contributed by Nikita tiwari.

C#

// C# implementation to find the
// number closest to n and divisible by m
using System;
 
class GFG {
 
    // function to find the number closest to n
    // and divisible by m
    static int closestNumber(int n, int m)
    {
        // find the quotient
        int q = n / m;
 
        // 1st possible closest number
        int n1 = m * q;
 
        // 2nd possible closest number
        int n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1));
 
        // if true, then n1 is the required closest number
        if (Math.Abs(n - n1) < Math.Abs(n - n2))
            return n1;
 
        // else n2 is the required closest number
        return n2;
    }
 
    // Driver program to test above
    public static void Main()
    {
        int n = 13, m = 4;
        Console.WriteLine(closestNumber(n, m));
 
        n = -15;
        m = 6;
        Console.WriteLine(closestNumber(n, m));
 
        n = 0;
        m = 8;
        Console.WriteLine(closestNumber(n, m));
 
        n = 18;
        m = -7;
        Console.WriteLine(closestNumber(n, m));
    }
}
 
// This code is contributed by Sam007

PHP

<?php
// PHP implementation to find
// the number closest to n and
// divisible by m
 
// function to find the number
// closest to n and divisible by m
function closestNumber($n, $m)
{
    // find the quotient
    $q = (int) ($n / $m);
     
    // 1st possible closest number
    $n1 = $m * $q;
     
    // 2nd possible closest number
    $n2 = ($n * $m) > 0 ?
        ($m * ($q + 1)) : ($m * ($q - 1));
     
    // if true, then n1 is the
    // required closest number
    if (abs($n - $n1) < abs($n - $n2))
        return $n1;
     
    // else n2 is the required
    // closest number
    return $n2;
}
 
// Driver Code
$n = 13;
$m = 4;
echo closestNumber($n, $m), "\n";
 
$n = -15;
$m = 6;
echo closestNumber($n, $m), "\n";
 
$n = 0;
$m = 8;
    echo closestNumber($n, $m), "\n";
 
$n = 18;
$m = -7;
    echo closestNumber($n, $m), "\n";
 
// This code is contributed by jit_t
?>

Javascript

<script>
// Javascript implementation to find
// the number closest to n and
// divisible by m
 
// function to find the number
// closest to n and divisible by m
function closestNumber(n, m)
{
 
    // find the quotient
    let q = parseInt(n / m);
     
    // 1st possible closest number
    let n1 = m * q;
     
    // 2nd possible closest number
    let n2 = (n * m) > 0 ?
        (m * (q + 1)) : (m * (q - 1));
     
    // if true, then n1 is the
    // required closest number
    if (Math.abs(n - n1) < Math.abs(n - n2))
        return n1;
     
    // else n2 is the required
    // closest number
    return n2;
}
 
// Driver Code
let n = 13;
let m = 4;
document.write(closestNumber(n, m) + "<br>");
 
n = -15;
m = 6;
document.write(closestNumber(n, m) + "<br>");
 
n = 0;
m = 8;
document.write(closestNumber(n, m) + "<br>");
 
n = 18;
m = -7;
document.write(closestNumber(n, m) + "<br>");
 
// This code is contributed by gfgking
</script>

Producción: 
 

12
-18
0
21

Complejidad de tiempo: O(1)
Este artículo es una contribución de Ayush Jauhari . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *