【蓝桥杯】 基础练习 特殊回文数

版权声明:本文为博主原创文章,转载请注明出处-- https://blog.csdn.net/qq_38790716/article/details/88380094

问题描述
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数 n n ,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数 n n
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入
52
样例输出
899998
989989
998899
数据规模和约定
1<= n n <=54。

枚举

1.分别枚举5位与6位的情况,进行判断是否等于 n n

#include <iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    for (int i = 1;i <= 9; ++i) {
    	for (int j = 0; j <= 9; ++j) {
    		for (int k = 0;k <= 9; ++k) {
    			if ((i + j) * 2 + k == n) {
    				cout << i << j << k << j << i<< endl;
				}
			}
		}
	}
	for (int i = 1; i <= 9; ++i) {
    	for (int j = 0; j <= 9; ++j) {
    		for (int k = 0;k <= 9; ++k) {
    			if ((i + j + k) * 2 == n) {
    				cout << i << j << k << k << j << i<< endl;
				}
			}
		}
	}
	return 0;
}

2.因为要求的回文数是5位或6位,所以可以直接从10000判断到1000000,看这些数中哪些满足要求

#include <iostream>
using namespace std;

int n;
int digit[6];
bool judge(int x) {
	int m = 0, sum = 0;
	while (x) {
		digit[m++] = x % 10;
		sum += x % 10;
		x /= 10;
	}
	if (sum != n) {
		return false;
	}
	for (int i = 0; i < m / 2; ++i) {
		if (digit[i] != digit[m - i - 1]) {
			return false;
		}
	}
	return true;
}
int main() {
	cin >> n;
	for (int i = 10000; i < 1000000; ++i) {
		if (judge(i)) {
			cout << i << endl;
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38790716/article/details/88380094