ให้ 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