โจทย์
ตัวเลขที่สร้างจากหลัก {0, 1, 2, 3, 4, 5} คือ
0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, 22, 23, 24, 25, ฯลฯ
เราสามารถสร้างลำดับข้างต้นได้โดยใช้ 6 หลักแรก มาดูตัวอย่างการสร้างตัวเลข
1 * 10 + 0 = 10 1 * 10 + 1 = 11 1 * 10 + 2 = 12 1 * 10 + 3 = 13 1 * 10 + 4 = 14 1 * 10 + 5 = 15
เช่นเดียวกัน ใช้กับตัวเลข 2, 3, 4, 5 คุณจะได้ 6 ตัวเลขถัดไปด้วย 2 โดยใช้รูปแบบข้างต้น และ 3 ต่อมา 4 และ 5
อัลกอริธึม
- กำหนดตัวเลข n
- กำหนดเวกเตอร์ (vector)
- เขียนลูปที่วนรอบจาก 0 ถึง 5
- เพิ่มตัวเลขทั้งหมดเข้าไปในเวกเตอร์
- เรามีตัวเลข 6 ตัวแรกของลำดับแล้ว
- เขียนลูปที่วนรอบจาก 0 ถึง n / 6
- เขียนลูปที่วนรอบจาก 0 ถึง 5
- สร้างตัวเลขที่เหลือด้วยรูปแบบที่อธิบายไว้ข้างต้น
- เพิ่มเข้าไปในเวกเตอร์
- เขียนลูปที่วนรอบจาก 0 ถึง 5
- คืนค่าตัวเลขลำดับที่ n จากลำดับ
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
int findNthNumber(int n) {
vector<int> numbers;
for (int i = 0; i < 6; i++) {
numbers.push_back(i);
}
for (int i = 0; i <= n / 6; i++) {
for (int j = 0; j < 6; j++) {
if ((numbers[i] * 10) != 0) {
numbers.push_back(numbers[i] * 10 + numbers[j]);
}
}
}
return numbers[n - 1];
}
int main() {
int n = 7;
cout << findNthNumber(n) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
10