题目链接:
PREV-21 回文数字
思路:
dfs出所有情况即可
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int a[3], b[3], s;
vector<int> v;
inline void dfsa(int p) {
if(p == 3) {
if(s == n) v.push_back(a[0] * 100001 + a[1] * 10010 + a[2] * 1100);
return;
}
for(int i = !p; i <= 9; i++) {
if(s + (i << 1) > n) return;
a[p] = i, s += i << 1;
dfsa(p + 1);
a[p] = 0, s -= i << 1;
}
}
inline void dfsb(int p) {
if(p == 3) {
if(s == n) v.push_back(b[0] * 10001 + b[1] * 1010 + b[2] * 100);
return;
}
for(int i = !p; i <= 9; i++) {
if(s + (p == 2 ? i : (i << 1)) > n) return;
b[p] = i, s += p == 2 ? i : (i << 1);
dfsb(p + 1);
s -= p == 2 ? i : (i << 1);
}
}
int main() {
#ifdef MyTest
freopen("Sakura.txt", "r", stdin);
#endif
cin >> n;
dfsa(0), dfsb(0);
sort(v.begin(), v.end());
if(v.size() == 0) cout << -1;
else for(int i = 0; i < v.size(); i++) cout << v[i] << '\n';
return 0;
}