【DFS枚举】最多有十位,这十位分别填7或者4的话也才 2^10 种可能,所以直接枚举出第一个比n大的字符串就可以。需要注意一些细节:如果n是奇数位,那么前面需要补个0;如果枚举出来和n同位数的没有解,例如9999这种情况,四位的最大就是7744了,那么需要再从前面补上两个0,然后再枚举一下。
#include<bits/stdc++.h>
using namespace std;
string str, ans;
void dfs(string tmp, int t, int f, int s) {
if (t == str.size() && tmp >= str) {
if (ans.empty() || ans > tmp) ans = tmp;
return;
}
if (f < str.size() / 2) dfs(tmp + '4', t + 1, f + 1, s);
if (s < str.size() / 2) dfs(tmp + '7', t + 1, f, s + 1);
}
int main() {
cin >> str;
if (str.size() % 2) str = '0' + str;
dfs("", 0, 0, 0);
if (ans.empty()) {
str = "00" + str;
dfs("", 0, 0, 0);
}
cout << ans << endl;
}