숫자 합이 10인 숫자는
19, 28, 37, 46, 55, 64, 73, 82, 91 등,
시리즈를 관찰하면 각 숫자는 9씩 증가합니다. 위의 시퀀스에는 9만큼 증가하는 동안 자릿수 합이 10이 아닌 숫자가 있습니다. 그러나 자릿수 합이 10인 모든 숫자를 얻게 됩니다.피>
따라서 9씩 증가하고 숫자 합계를 확인하고 n번째 숫자를 찾는 루프를 가질 수 있습니다. 몇 가지 예를 살펴보겠습니다.
입력
3 7
출력
37 73
알고리즘
- 숫자 n 초기화
- 카운터를 0으로 초기화합니다.
- 19에서 반복되는 루프 작성
- 현재 숫자의 합이 10이면 카운터를 1씩 증가시킵니다.
- 카운터가 n이면 현재 숫자를 반환합니다.
- 반복 변수를 9만큼 증가시킵니다.
구현
다음은 위의 알고리즘을 C++로 구현한 것입니다.
#include <bits/stdc++.h>
using namespace std;
int findNthNumber(int n) {
int count = 0, i = 19;
while (true) {
int sum = 0;
for (int number = i; number > 0; number = number / 10) {
sum = sum + number % 10;
}
if (sum == 10) {
count++;
}
if (count == n) {
return i;
}
i += 9;
}
return -1;
}
int main() {
int n = 7;
cout << findNthNumber(7) << endl;
return 0;
} 출력
위의 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.
73