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