问题 G: 最小的回文数
时间限制: 1 Sec 内存限制: 32 MB
[提交][状态][讨论版]
题目描述
回文数是从前往后和从后往前得到的数是相同的。
现给你一个正整数N,请你找到比N大的最小的那个回文数P。
输入
输入包含多组测试数据。
每组输入一个正整数N,N不超过10000位,并且N不包含前导0。
输出
对于每组输入,输出比N大的最小的那个回文数P。
样例输入

44
3
175

样例输出

55
4
181

提示
/*
解题思路:
字符串处理。
分为原来使回文,原来不是回文两部分来处理。
原来是回文,要特殊考虑一下全是9的情况,直接输出一个1,然后length-1个0,最后加一个1。
原来是回文且不全是9,只需要从对称轴开始找第一对不为9的+1就OK(长度为奇数我当中间同一个数为一对)
原来不是回文,明确一点,不能变小!
所以 对称轴左边的值 先赋值 给它们对称的位置
这让原来不是回文的变成了一个回文,但是并不能保证它没有变小。
所以变成回文后,与原来的那个串比较一下,如果比之前大,那这个就是结果。
如果没有比之前大,那就把这个串(已经变成了回文串)按原来那样是回文的时候一样处理就行!

*/

ac_code:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e4 + 5;
char s[maxn];
char st[maxn];
void  solve(char * s,int cnt,int len)
{int t = len&1 ? len/2 : len/2-1;int pos = t;if(cnt == len){printf("1");for(int i = 1; i < len; i++){printf("0");}printf("1\n");return;}if(s[pos] != '9'){s[pos] = s[len-1-pos] = s[pos]+1;}else{while(s[pos] == '9' && pos >= 0){s[pos]=s[len-1-pos] = '0';pos--;}s[pos] = s[len-1-pos] = s[pos]+1;}printf("%s\n",s);return;
}
int main()
{while(~scanf("%s",s)){int  len = strlen(s);int flag = 1,cnt = 0;for(int i = 0,j = len-1; i <= j; i++,j--){if(s[i] != s[j]){flag = 0;break;}if(s[i]=='9') i==j ? cnt += 1 : cnt += 2;}if(flag){solve(s,cnt,len);}else{memset(st,'\0',sizeof(st));strcpy(st,s);cnt = 0;for(int i = 0,j = len-1; i <= j; i++,j--){if(st[i] != st[j]){st[j] = st[i];}if(st[i]=='9') i==j ? cnt += 1 : cnt += 2;}if(strcmp(st,s)>0)printf("%s\n",st);elsesolve(st,cnt,len);}memset(s,'\0',sizeof(s));}return 0;
}

问题 G: 最小的回文数相关推荐

  1. 输入一个整数判断其是否是回文数

    每日壹句:如果你要驯服一个人,就要冒着掉眼泪的危险.我们从不惧怕眼泪,但是,要值得. "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我 ...

  2. 10000内的回文数c语言,回文数

    "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这样的特征,成为回文数(pa ...

  3. 五位数回文数c语言程序,五位数的回文数有多少个

    2018-12-16 数学中有哪些回文数? 简介折叠编辑本段回文数是指一个像16461这样"对称"的数,即:将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样.这里,& ...

  4. P1609 最小回文数

    P1609 最小回文数 链接: link. 题解:将前半部分对称到字符串后半部分,就可以得到回文串,如果该回文串小于给出的字符串,从中间加1即可,注意有9的情况,当中间是9时,中间变0同时前后加1.注 ...

  5. 求中位数中回文数之和C语言,一些算法题及答案

    1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...

  6. c语言1106回文数,Codeforces 1106 简要题解

    A题 传送门 读错题还能过样例我给自己点个赞. 题意简述:给一个010101网格SSS,问满足Si,j=Si+1,j+1=Si+1,j−1=Si−1,j−1=Si−1,j+1S_{i,j}=S_{i+ ...

  7. php判断一个数是否是回文数,每周一道算法题001:回文数

    题目: 找出大于10的最小的2进制,8进制,10进制都是回文数的最小的数.回文数指的是正读和反读都是一样的数,例如:33,10001,123454321... 思路: 先转换进制,然后统一处理成字符串 ...

  8. C语言经典例30-判断回文数

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 2 分析 本题的思路是把这个数分解重新组成一个数,分 ...

  9. substr判断最后一个是不是逗号_用java帮助你判断一个数是不是回文数

    哈喽大家好,这里是Java小白成长记! 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的的 ...

最新文章

  1. GPT-3 的到来,程序员会被 AI 取代吗?
  2. AngularJS与Django-模板标签冲突
  3. 微星笔记本电脑恢复出厂或者一键还原图文流程
  4. 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】04、统一处理异常...
  5. 用cin解决有时输入两个,有时输三个变量
  6. Atitit 调试工具模块 保存序列化map参数 mybatis调试sql selectid 查看mybatis真实sql 1.1. 对象序列化功能 序列化为bytearr 文件等 1 1.2.
  7. kafka传递文件_是否可以使用Kafka传输文件?
  8. 大数据毕设/课设 - 基于大数据的可视化分析模板
  9. 移动路由器刷linux,家用WIFI路由器硬改刷系统(DIY智能路由器)
  10. 服务器删除的文件不在回收站,删除的文件不在回收站如何恢复?新方法来了
  11. BRE BRE ProMax 2.0.7047.0 工艺流程模拟软件ProMax\
  12. 花开的地方在希尔的故乡,听着远古的战歌仿佛生在花开的地方
  13. 不稳定的排序-选择排序
  14. Java实现京东登录
  15. 智慧公交解决方案-最新全套文件
  16. UserControl关闭事件
  17. <Zhuuu_ZZ>那些年我们踩过的Hadoop HA的坑--高可用集群
  18. “三屏融合”或比“三网融合”更不现实
  19. apk包反编译,签名
  20. 从苏宁电器到卡巴斯基第11篇:我在苏宁电器当营业员 II

热门文章

  1. 超级计算机换算成智商,全球第二超级计算机运算力不如人脑 《转》
  2. 最简单的matplotlib写法
  3. Apache Flink 读取本地文件,处理数据,导入ES
  4. SpringMVC使用AOP
  5. 自然语言处理之神经网络基础(四)
  6. 一些著名的软件都用什么语言编写?
  7. Python处理图像五个有趣场景,很实用!
  8. 告别加班:一个让你不再重复工作的技能
  9. 讲讲 Python Launcher 是什么鬼东西?
  10. 同花顺怎么导出数据到excel_Excel怎么导出手机通讯录vCard文件