首页 > 代码库 > 蓝桥杯 - 回文数字 (字符串!!)
蓝桥杯 - 回文数字 (字符串!!)
回文数字
时间限制:1.0s 内存限制:256.0MB
问题描述
观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
本题要求你找到一些5位或6位的十进制数字。满足如下要求:
该数字的各个数位之和等于输入的整数。
输入格式
一个正整数 n (10<n<100), 表示要求满足的数位和。
输出格式
若干行,每行包含一个满足要求的5位或6位整数。
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
数字按从小到大的顺序排列。
如果没有满足条件的,输出:-1
样例输入
44
样例输出
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
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; }
蓝桥杯 - 回文数字 (字符串!!)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。