C++中比N大的、A和B位數相同的下一個數


給定NAB。找到一個大於N的數,其A和B的位數相同。讓我們來看一個例子。

N = 1234
A = 2
B = 3

我們需要檢查給定位數的每種可能性。有兩個數字構成該數。並且該數中每個數字的計數應該相同。

演算法

  • 初始化A、B和N。

  • 編寫一個遞迴函式。

    • 檢查當前數字是否大於N並且具有相同數量的AB位數。

    • 如果滿足上述條件,則返回該數字。

    • 將數字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

更新於:2021年10月25日

89 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.