蓝桥杯历届试题-回文数字

题目描述

观察数字:12321,123321  都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。

输入格式

一个正整数  n  (10< n< 100),  表示要求满足的数位和。

输出格式

若干行,每行包含一个满足要求的5位或6位整数。 
数字按从小到大的顺序排列。 
如果没有满足条件的,输出:-1 

样例输入

复制

44 

样例输出

复制

99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499

我这个代码有问题,但是实在找不出来问题,请大佬解惑

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int n, f = 0, x[199999] = { 0 };
	cin >> n;
	for (int i = 9; i>0; i--)//第一位与最后一位
	{
		for (int j = 9; j >=0; j--)//第二位与倒数第二位
		{
			int k = n - 2 * i - 2 * j;//各位置相加为n,中间两位或一位
			if (k>=0 && k <= 18&&k%2==0) { x[f++] = i * 100001 + j * 10010 + k * 1100 / 2; }//分两位一定是偶数
			if (k >= 0 && k <= 9) { x[f++] = i * 10001 + j * 1010 * k * 100; } //一位只是个位数
		}
	}
	if (!f)cout << "-1" << endl;
	else
	{
		sort(x, x + f);
		for (int i = 0; i <= f; i++)cout << x[i] << endl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值