ให้ N , ก และ B . ค้นหาตัวเลขที่มากกว่า N ด้วยจำนวน A . เท่ากัน และ ข ตัวเลข มาดูตัวอย่างกัน
N = 1234 A = 2 B = 3
เราจำเป็นต้องตรวจสอบความเป็นไปได้ของจำนวนหลักที่ระบุ มีสองหลักในการสร้างตัวเลข และการนับแต่ละหลักในตัวเลขควรเท่ากัน
อัลกอริทึม
-
เริ่มต้น A, B และ N.
-
เขียนฟังก์ชันแบบเรียกซ้ำ
-
ตรวจสอบว่าจำนวนปัจจุบันมากกว่า N และมีจำนวนเท่ากับ A และ ข ตัวเลข
-
ส่งคืนหมายเลขหากตรงตามเงื่อนไขข้างต้น
- เพิ่มตัวเลข 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