두 개의 정수 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