给定两个整数n和m 。问题是找到最接近n且可被m整除的数字。如果该数字不止一个,则输出绝对值最大的数字。如果n可被m整除,则仅输出n 。需要O(1)的时间复杂度。
约束: m!= 0
例子:
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.
资料来源: Microsoft面试经验|设置125。
我们发现n / m的值。将此值设为q。然后我们找到两种可能性中最接近的一种。一个是q * m另一个是(m *(q + 1))或(m *(q – 1)),这取决于给定的两个数字之一是否为负。
算法:
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
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
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
输出:
12
-18
0
21