蓝桥杯 - 回文数字 (字符串!!)

回文数字  
时间限制:1.0s   内存限制:256.0MB
    
问题描写叙述
  观察数字: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
例子输入
60
例子输出
-1


思路:先把回文的序列的表打好,算出来正好就1800。所以我数组开的2000

然后从前到后扫一遍就可以,满足条件就输出。


AC代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int maxn = 2000;
int palin[maxn], num = 0;

int is_palin(int n)    //推断是否是回文数 
{
	if(n<100000)
	{
		if( (n/10000 == n%10) && (n/1000%10 == n/10%10) )
			return 1;
	}
	else
	{
		if((n/100000 == n%10) && (n/10000%10 == n/10%10) && (n/1000%10 == n/100%10))
			return 1;
	}
	return 0;
}

void init()     //回文数打表 
{
	for(int i=10000; i<=999999; i++)
	{
		if(is_palin(i)) palin[num++] = i;
	} 
}

int fun(int n)     //推断是否符合条件 
{
	int t = 0, m = n;
	while(m)
	{
		t += m%10;
		m /= 10;
	}
	return t;
}

int main()
{
	init();
	int n;
	while(scanf("%d", &n) != EOF)
	{
		if(n < 5 || n>54) { printf("-1\n"); continue; }
		for(int i=0; i<num; i++)
		{
			if(fun(palin[i]) == n) printf("%d\n", palin[i]);
		}
	}
	return 0;
} 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值