두 개의 정수 n과 m이 있다고 가정합니다. n에 가장 가까운 수를 찾아 m으로 나누어야 합니다. 그러한 숫자가 두 개 이상인 경우 절대값이 최대인 숫자를 표시하십시오. n이 m으로 완전히 나누어지면 n을 반환합니다. 따라서 n =13, m =4이면 출력은 12입니다.
이 문제를 해결하기 위해 다음 단계를 수행할 수 있습니다. -
- q:=n/m 및 n1:=m*q
- n * m> 0이면 n2 :=m * (q + 1), 그렇지 않으면 n2 :=m * (q - 1)
- 만약 |n – n1| <|n – n2|, n1 반환, 그렇지 않으면 n2 반환
예시
#include<iostream> #include<cmath> using namespace std; int findClosest(int n, int m) { int q = n / m; int n1 = m * q; int n2 = (n * m) > 0 ? (m * (q + 1)) : (m * (q - 1)); if (abs(n - n1) < abs(n - n2)) return n1; return n2; } int main() { int n = 13, m = 4; cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl; n = 0; m = 8; cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl; n = 18; m = -7; cout << "Closest for n = " << n << ", and m = " << m << ": " << findClosest(n, m) << endl; }에 대해 가장 가깝습니다.
출력
Closest for n = 13, and m = 4: 12 Closest for n = 0, and m = 8: 0 Closest for n = 18, and m = -7: 21