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