โจทย์
ตัวเลขที่ผลรวมหลักเท่ากับ 10 คือ
19, 28, 37, 46, 55, 64, 73, 82, 91, ฯลฯ
หากคุณสังเกตลำดับ แต่ละตัวเลขเพิ่มขึ้น 9 มีตัวเลขในลำดับข้างต้นที่ผลรวมหลักไม่เท่ากับ 10 ขณะเพิ่มขึ้น 9 แต่คุณจะได้ตัวเลขทั้งหมดที่ผลรวมหลักเท่ากับ 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