Dãy số có tổng chữ số = 10: 19, 28, 37, 46, 55, 64, 73, 82, 91, 109, 118...
Quan sát: hiệu giữa các số liên tiếp thường là 9 (nhưng không phải lúc nào cũng đúng do carry).
Thuật toán
- Duyệt từ 19, bước nhảy 9.
- Kiểm tra tổng chữ số == 10.
- Đếm đến khi tìm được số thứ N.
Triển khai C++
#include <bits/stdc++.h>
using namespace std;
int digitSum(int n) {
int s = 0;
while (n) { s += n % 10; n /= 10; }
return s;
}
int nthDigitSum10(int n) {
int count = 0;
for (int i = 19; ; i += 9)
if (digitSum(i) == 10 && ++count == n) return i;
return -1;
}
int main() {
cout << nthDigitSum10(7) << endl; // 73
return 0;
}
Kết quả
73