原题链接:蓝桥杯历届试题-回文数字
解题思路:既然是前后相同,那么就只用从100检查到999就行,分两次检索,第一次找出符合的五位数,第二次找六位数。
注意事项:
别忘了如果没有符合的数字要在最后输出-1.我用到sstream这个库,可用方便地将数字和字符串进行转化。
参考代码:
#include <iostream> #include <sstream> using namespace std; void i2s(int &x, string &s) { //将int变为string stringstream ss; ss << x; ss >> s; } bool check(string s, int len,int n) { //检查该数字是否符合要求 int *a =new int[len]; int sum=0; for (int i = 0; i < len; i++) { a[i] = s[i] - '0'; sum += a[i]; } if (sum == n) return true; else { return false; } } int main() { int count = -1; //计数,如果没有符合的数,则输出-1 int n,i; int len; string str; cin >> n; for ( i = 100; i <= 999; i++) { //先寻找5位数 i2s(i, str); //变为字符串 str = str + str[1] + str[0]; //组合成五位的回文数 if (check(str, str.size(), n)) { //检查 cout << str << endl; count++; } } for (int i = 100; i <= 999; i++) { //再寻找6位数 i2s(i, str); str = str + str[2] + str[1] + str[0];//组合成六位的回文数 if (check(str, str.size(), n)) { cout << str << endl; count++; } } if (count == -1) cout << -1; return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复