Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ตัวเลขถัดไปที่มากกว่า N และมีจำนวนหลัก A และ B เท่ากันใน C++

โจทย์

กำหนด 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