C++中比N大的、A和B位数相同的下一个数
给定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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP