The Next Palindrome
题目:A positive integer is called a palindrome if its representation in the decimal system is the same when read from left to right and from right to left. For a given positive integer K of not more than 1000000 digits, write the value of the smallest palindrome larger than K to output. Numbers are always displayed without leading zeros.
题目分析:这题与上次华中南赛区的一个题目一样,曾记得当时我一看到这样的题目就不想做,觉得很麻烦,所以马上果断地扔给zsq做,唉,这也反映出我一向的怪毛病,碰到麻烦题就不想做。这次再次做这个题目,发现只要把这个题目的思路好好的想清楚,写代码还是挺快,其实也不是很长,一交,局然神奇般的1Y
题目思路其实很简单,首先考虑特殊情况。当k<9时,直接输出k+1;当k各位全部都是9时,如k=9999,直接输出10001。
其它情况,我们可以肯定输出的值最多也就是全部都是9,也就是说最后一位来处理时肯定不会超过9,所以不需要处理最后一位的进位问题。
首先按k的位数分为奇数、偶数两种情况对称处理。按照对称位置,低位服从于高位,即不管低位的值是什么,全部都改为与对称的高位的值相同。这时可能会出现数k的值会减少,这时通过中间位加1,然后处理相关进位问题即可。
//贪心+模拟
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1000010;
char k[maxn];
int main()
{
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(k);
int len=strlen(k);
if(len==1)
{
if(k[0]>='0'&&k[0]<='8') putchar(k[0]+1);
else puts("11");
continue;
}
int i;
for(i=0;i<len;i++)
{
if(k[i]!='9') break;
}
if(i>=len)
{
putchar('1');
for(int i=1;i<len;i++) putchar('0');
puts("1");
continue;
}
k[len-1]++;
for(int i=len-1;i>=0;i--)
{
if(k[i]-'0'>9) k[i]='0',k[i-1]++;
else break;
}
if(len&1)
{//处理奇数的情况
int mid=len/2;
bool flag=false;//用于标记数k是否变小啦
for(int i=len-1;i>mid;i--)
{
if(k[i]>k[2*mid-i]) flag=true;//数k变小
k[i]=k[2*mid-i];
}
if(flag)
{//数k比原数小,需要调整
k[mid]++;
int l=mid;
while(l>=0)
{
if(k[l]-'0'>9)
{
k[l]=k[2*mid-l]='0';
k[l-1]++,k[2*mid-(l-1)]++;
l--;
}
else break;
}
}
puts(k);
}
else
{//处理偶数的情况
int mid=len/2;
bool flag=false;//用于标记数k是否变小啦
for(int i=len-1;i>=mid;i--)
{
int j=2*mid-i-1;
if(k[i]>k[j]) flag=true;//数k变小
k[i]=k[j];
}
if(flag)
{//数k比原数小,需要调整
int i=mid,j=mid-1;
k[i]++,k[j]++;
while(i<len&&j>=0)
{
if(k[i]-'0'>9)
{
k[i]=k[j]='0';
k[i+1]++,k[j-1]++;
i++,j--;
}
else break;
}
}
puts(k);
}
}
return 0;
}
分享到:
相关推荐
最近,我接触了一个项目“huiwenshu.rar_palindrome”,该项目的目标是开发一个能够处理1-99999位数回文数判断的程序,同时,这个项目还涉及到了银行管理系统的部分功能,如利率计算、密码管理以及余额管理。...
Yet Another Palindrome Problem 题目链接-B. Yet Another Palindrome Problem 题目大意 给一个长为n(≤5000)的数组,问是否存在一个长度至少为3的子序列是回文的,子序列的数可以不连续但是相对顺序不可变 解题...
正常来说暴力的思路是先匹配前缀pre和后缀suf,找到第一个不匹配的l和r,然后在由l开始从左向右求最长的回文串palindrome,以及由r开始从右向左求最长的回文串palindrome,那么pre+palindrome+suf就是答案。...
传送门 题意: 一个长度为n的数组,为删除一些数后,剩下的数能否构成长度大于3的回文数组 思路: 只要能找到两个相等的数,且他们的间距大于2即可 o(n^2)的暴力就能过 比赛时写了一个o(n)的 就是把所有相等的数放到...
Palindrome Sub-Array,Problem Description A palindrome sequence is a sequence which is as same as its reversed order. For example, 1 2 3 2 1 is a palindrome sequence, but 1 2 3 2 2 is not. Given a 2-...
《LeetCode9:判断回文数——Java实现详解》 在编程的世界里,LeetCode是一个广受欢迎的在线平台,它提供了各种算法问题供程序员们挑战和提升技能。今天我们要探讨的是LeetCode第9题——“回文数”。...
PalindromeNumber.java
palindrome22.in
6. **AC代码分析**:`POJ1159-Palindrome.cpp` 文件很可能是通过问题的C++代码实现,可能包含了上述的回文判断方法和完整的I/O流程。而`POJ1159-Palindrome.doc` 文件可能包含了解题思路、算法分析和代码解释等内容...
palindrome_prime.c
正常来说暴力的思路是先匹配前缀pre和后缀suf,找到第一个不匹配的l和r,然后在由l开始从左向右求最长的回文串palindrome,以及由r开始从右向左求最长的回文串palindrome,那么pre+palindrome+suf就是答案。...
5. 可能还有测试文件(如`tests`目录)和示例文件(如`examples`目录),帮助用户理解和验证库的功能。 为了使用这个库,开发者需要首先解压`check-palindrome-kriti-0.0.1.tar.gz`,然后在命令行中运行`python ...
Palindrome.py
He learned that a palindrome is a string that is the same as its reverse. For example, strings “pop”, “noon”, “x”, and “kkkkkk” are palindromes, while strings “moon”, “tv”, and “abab” ...
B. Longest Palindrome time limit per test1 second memory limit per test256 megabytes ... He learned that a palindrome is a string that is the same as its reverse. For example, strings
回文数Java
题目地址: https://www.lintcode.com/problem/valid-palindrome/description 给定一个字符串,只考虑字母和数字,字母忽略大小写区别,忽略所有其他字符,问该字符串是否... * @return: Whether the string is a vali
《回文:数据结构的魅力与应用》 回文,这个看似简单的词汇,实则蕴含了丰富的数学和计算机科学内涵。在中文中,回文是指正读反读都能保持相同的词语,如“上海自来水来自海上”。而在计算机领域,尤其是数据结构中...
On The Game...............................................................................................................................13 2.1. History................................................
JAVA程序 Palindrome.java 输入任何字母数字组合 检查是否是回文结构? 例:abccba 从左往右看 和 从右往左看一样 为回文结构 包括检查是否带标点符号 检查是否有空格 如a bccba 输入带空格 仍为回文结构