问题 G: 最小的回文数
问题 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: 最小的回文数相关推荐
- 输入一个整数判断其是否是回文数
每日壹句:如果你要驯服一个人,就要冒着掉眼泪的危险.我们从不惧怕眼泪,但是,要值得. "回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我 ...
- 10000内的回文数c语言,回文数
"回文"是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这样的特征,成为回文数(pa ...
- 五位数回文数c语言程序,五位数的回文数有多少个
2018-12-16 数学中有哪些回文数? 简介折叠编辑本段回文数是指一个像16461这样"对称"的数,即:将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样.这里,& ...
- P1609 最小回文数
P1609 最小回文数 链接: link. 题解:将前半部分对称到字符串后半部分,就可以得到回文串,如果该回文串小于给出的字符串,从中间加1即可,注意有9的情况,当中间是9时,中间变0同时前后加1.注 ...
- 求中位数中回文数之和C语言,一些算法题及答案
1. 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这 ...
- 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+ ...
- php判断一个数是否是回文数,每周一道算法题001:回文数
题目: 找出大于10的最小的2进制,8进制,10进制都是回文数的最小的数.回文数指的是正读和反读都是一样的数,例如:33,10001,123454321... 思路: 先转换进制,然后统一处理成字符串 ...
- C语言经典例30-判断回文数
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 2 分析 本题的思路是把这个数分解重新组成一个数,分 ...
- substr判断最后一个是不是逗号_用java帮助你判断一个数是不是回文数
哈喽大家好,这里是Java小白成长记! 昨天分享了怎么来判断一个数字的奇偶性,其中用到了if选择语句和求余运算,虽然都不是很难的知识点,但是也不可能分享一次就不管了,所以今天继续分享一个和它俩有关的的 ...
最新文章
- GPT-3 的到来,程序员会被 AI 取代吗?
- AngularJS与Django-模板标签冲突
- 微星笔记本电脑恢复出厂或者一键还原图文流程
- 【从0到1,搭建Spring Boot+RESTful API+Shiro+Mybatis+SQLServer权限系统】04、统一处理异常...
- 用cin解决有时输入两个,有时输三个变量
- Atitit 调试工具模块 保存序列化map参数 mybatis调试sql selectid 查看mybatis真实sql 1.1. 对象序列化功能 序列化为bytearr 文件等	1 1.2.
- kafka传递文件_是否可以使用Kafka传输文件?
- 大数据毕设/课设 - 基于大数据的可视化分析模板
- 移动路由器刷linux,家用WIFI路由器硬改刷系统(DIY智能路由器)
- 服务器删除的文件不在回收站,删除的文件不在回收站如何恢复?新方法来了
- BRE BRE ProMax 2.0.7047.0 工艺流程模拟软件ProMax\
- 花开的地方在希尔的故乡,听着远古的战歌仿佛生在花开的地方
- 不稳定的排序-选择排序
- Java实现京东登录
- 智慧公交解决方案-最新全套文件
- UserControl关闭事件
- <Zhuuu_ZZ>那些年我们踩过的Hadoop HA的坑--高可用集群
- “三屏融合”或比“三网融合”更不现实
- apk包反编译,签名
- 从苏宁电器到卡巴斯基第11篇:我在苏宁电器当营业员 II