숫자 합이 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