โจทย์
คุณได้รับตัวเลขสามตัว คุณต้องหาตัวคูณลำดับที่ n จากตัวคูณของตัวเลขสองตัวแรก มาดูตัวอย่างเพื่อเข้าใจมากขึ้น
อินพุต
x = 2 y = 3 n = 7
เอาต์พุต
10
ตัวคูณ n แรกของ 2 คือ 2 4 6 8 10 12 14
ตัวคูณ n แรกของ 3 คือ 3 6 9 12 15 18 21
ถ้ารวมตัวคูณทั้งสองและเรียงลำดับ เราจะได้ 2 3 4 6 8 9 10 12 14 15 18 21 และตัวเลขลำดับที่ n จากรายการคือ 10
อัลกอริธึม
- กำหนดเวกเตอร์เพื่อเก็บตัวคูณทั้งหมด
- หาตัวคูณ n แรกของ x และเพิ่มเข้าไปในเวกเตอร์ข้างต้น
- ตอนนี้หาตัวคูณ n แรกของ y
- เพิ่มเข้าไปในเวกเตอร์ถ้ายังไม่มีอยู่ในเวกเตอร์
- เรียงลำดับตัวคูณ
- พิมพ์ตัวคูณลำดับที่ n จากเวกเตอร์
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include<bits/stdc++.h>
using namespace std;
int findNthMultiple(int x, int y, int n) {
vector<int> multiples;
for (int i = 1; i <= n; i++) {
multiples.push_back(x * i);
}
sort(multiples.begin(), multiples.end());
for (int i = 1, k = n; i <= n && k; i++) {
if (!binary_search(multiples.begin(), multiples.end(), y * i)) {
multiples.push_back(y * i);
sort(multiples.begin(), multiples.end());
}
}
return multiples[n - 1];
}
int main() {
int x = 2, y = 3, n = 7;
cout << findNthMultiple(x, y, n) << endl;
return 0;
}
ผลลัพธ์
ถ้าคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
10