网站建设施工图片,网站服务器基本配置,东莞网站建设中企动力技术支持,医疗网站建设流程题目描述
观察数字#xff1a;12321#xff0c;123321 都有一个共同的特征#xff0c;无论从左到右读还是从右向左读#xff0c;都是相同的。这样的数字叫做#xff1a;回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求#xff1a; 该数字的各个数位之…题目描述
观察数字12321123321 都有一个共同的特征无论从左到右读还是从右向左读都是相同的。这样的数字叫做回文数字。 本题要求你找到一些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
方法一简单取巧
#includestdio.h
int main()
{int a,b,c,flag1,i,n;scanf(%d,n);for(i1;i2;i)for(a1;a10;a)for(b0;b10;b)for(c0;c10;c) if(2*a2*bi*cn){flag0;if(i1) printf(%d%d%d%d%d\n,a,b,c,b,a);else printf(%d%d%d%d%d%d\n,a,b,c,c,b,a);}if(flag) printf(-1\n); return 0;
}
方法二
#include stdio.h
int main(void)
{int n, flag 1;scanf(%d, n);for(int i 10000; i 1000000; i){int t i, num 0, sum 0;while(t0){num num*10 t%10;sum t%10;t / 10;}if(numi sumn){flag 0;printf(%d\n, i);}}if(flag){printf(-1\n);}return 0;
}
解题思路
题目种说5位数和6位数的并且从小到大我直接按顺序遍历10000到1000000不包括之间的数把么一个数就求其回文和给位数字之和来判断时候复合要求判断回文数组也可以做到但是在本题种使用本人的做法可以简单的将判断回文和求个位数字之和一起方便求得比如给出12211221%101 -1221/10122 - 1*10122%1012 -122/1012
-12*1012%10122 - 12/101 - 122*101%101221 得到1221与原来给出得相等
在举个反例123123%103 - 123/1012 - 3*1012%1032 - 12/101 -32*101%10321; 123 ! 321 故不是回文数
求个位数字之和只用在求回文得时候 每次取余得到得数累加求和即可。 注意事项:
在判断回文的时候记得用一个临时变量代替正在遍历的数不然会影响遍历顺序导致程序出错。
方法三
#includeiostream
using namespace std;
bool check(int a[],int j){ //判断是否回文 int i;for(i0;ij;i){if(a[i]!a[j-i-1])return false;}return true;
}
int main()
{int n;cinn;int flag 0;for(int i10001;i999999;i){int sum0;int temp i;int *b new int(6);int j 0;while(temp){sumtemp%10;b[j] temp%10;temp/10;}if(check(b,j)n sum){flag 1;coutiendl;}delete []b;}if(flag 0){cout-1endl;}return 0;
}