【蓝桥杯练习】历届试题 回文数字
2015-03-16 20:32
267 查看
问题描述
观察数字: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
大牛的代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <iomanip> #include <algorithm> #include <vector> #include <queue> #include <stack> using namespace std; #define inf 1000000000 int main() { int n; cin>>n; int flag=0; int a[10]={0}; a[4]=1; while(a[6]!=1) { int k=6; while(a[k]==0)k--; int flag1=0; for(int i=0;i<=k;i++)//搜索回文数 { if(a[i]!=a[k-i]) { flag1=1; break; } } if(flag1==0)//如果是回文数则看各位和是否等于N { int sum=0; for(int i=0;i<=k;i++)sum+=a[i]; if(sum==n) { for(int i=0;i<=k;i++)cout<<a[i]; cout<<endl; flag=1; } } a[0]++; k=0; while(a[k]>=10)//可以理解为“进位” { a[k]-=10; a[k+1]++; k++; } } if(flag==0)cout<<-1<<endl; return 0; }
相关文章推荐
- 蓝桥杯 历届试题 回文数字【水题】
- 蓝桥杯历届试题之回文数字
- 蓝桥杯 历届试题 回文数字
- 蓝桥杯 PREV_21 历届试题 回文数字(java)
- 蓝桥杯 历届试题 回文数字
- 蓝桥杯 PREV-21 历届试题 回文数字
- 蓝桥杯 历届试题 回文数字 (Java解题)
- 1503140110-蓝桥杯-历届试题 回文数字
- 蓝桥杯 历届试题 回文数字
- 蓝桥杯 历届试题 回文数字
- 蓝桥杯 历届试题 回文数字 (暴力)
- 蓝桥杯日常刷题——历届试题1434:回文数字
- 蓝桥杯 历届试题 回文数字
- <历届试题>蓝桥杯之回文数字
- [蓝桥杯][历届试题]回文数字
- 【蓝桥杯】历届试题 回文数字
- 蓝桥杯历届试题 回文数字
- 蓝桥杯历届试题之回文数字
- 蓝桥杯 历届试题 回文数字 (水)
- 蓝桥杯 历届试题 回文数字