โจทย์
กำหนด N, A, และ B หาตัวเลขที่มากกว่า N และมีจำนวนหลัก A และ B เท่ากัน มาดูตัวอย่างกัน
N = 1234 A = 2 B = 3
เราต้องตรวจสอบทุกความเป็นไปได้ของจำนวนหลักที่กำหนด มีสองหลักสำหรับสร้างตัวเลข และแต่ละหลักในตัวเลขควรมีจำนวนเท่ากัน
อัลกอริธึม
- กำหนด A, B, และ N
- เขียนฟังก์ชันเวียนเกิด
- ตรวจสอบว่าตัวเลขปัจจุบันมากกว่า N และมีจำนวนหลัก A และ B เท่ากัน
- คืนค่าตัวเลขถ้าเงื่อนไขข้างต้นเป็นจริง
- เพิ่มหลัก A เข้าไปในผลลัพธ์
- เพิ่มหลัก B เข้าไปในผลลัพธ์
- เรียกฟังก์ชันเวียนเกิดซ้ำกับตัวเลขน้อยที่สุดจากสองตัวข้างต้น
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
long getNextGreaterElement(long result, int A, int A_Count, int B, int B_Count, int N) {
if (result > 1e11) {
return 1e11;
}
if (A_Count == B_Count && result >= N) {
return result;
}
return min(getNextGreaterElement(result * 10 + A, A, A_Count + 1, B, B_Count, N),
getNextGreaterElement(result * 10 + B, A, A_Count, B, B_Count + 1, N));
}
int main() {
int N = 1234;
int A = 2;
int B = 3;
cout << getNextGreaterElement(0, A, 0, B, 0, N) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
2233