이 문제에서는 두 개의 숫자 n과 d가 주어집니다. 우리의 임무는 숫자 d를 더한 후 가능한 최소 자릿수 합을 찾는 것입니다.
문제 설명 − n에 d의 k번째 배수를 추가하여 자릿수 합을 최소화해야 합니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력
n = 5230, d = 54
출력
1
설명
The number will be 5230 + (2*54) = 5338
솔루션 접근 방식
문제를 해결하는 간단한 방법은 1에서 8까지의 모든 d의 배수를 확인하는 것입니다. 9의 배수에서는 자릿수의 합이 반복되기 때문입니다. 이것은 모듈로 9를 기반으로 하며 숫자 합계를 반환합니다. 따라서 a+d*(9k+l) modulo 9는 a+d*l modulo 9와 같습니다. 따라서 1에서 8까지 l*d의 모든 배수를 확인하고 찾은 최소값을 반환합니다.
숫자 합이 1보다 작지 않다는 사실을 사용하여 프로그램을 한 단계 발전시킬 수 있으므로 숫자 합이 1이면 이를 반환합니다.
우리 솔루션의 작동을 설명하는 프로그램
예시
#include <iostream> using namespace std; int calcDigitSum(int n) { int i = n % 9; if (i == 0) return 9; else return i; } int findMinDigitSum(int n, int d) { int minSum = 10; int number; for (int i = 1; i < 9; i++) { number = (n + i * d); minSum = min(minSum, calcDigitSum(number)); if(minSum == 1) return minSum; } return minSum; } int main() { int n = 5230, d = 54; cout<<"The minimum possible digitsum after adding the number is "<<findMinDigitSum(n, d); return 0; }
출력
The minimum possible digitsum after adding the number is 1