蓝桥杯 PREV-21 回文数字

题目链接:

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;
}
发布了356 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_45228537/article/details/104410547