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.