找到下一个最大的回文数
Find next largest palindrome number
我编写了以下程序来为每个输入的数字找到最近的最大回文。第一行输入要输入的整数数。
我的问题是我已经尝试过极客和spojtoolkit(也是我知道最接近回文的随机数)的测试用例,并得到了正确的答案。然而,SPOJ说错了答案。任何人都可以建议我的代码可能无法工作或在我的代码中可能更正的情况。
using namespace std;
void evenmirror(char g[1000000],int n)
{
int k=n/2;
for(int i=n/2-1;i>=0;i--)
{
g[k]=g[i];
k++;
}
cout<<g;
}
void oddmirror(char g[1000000],int n)
{
int k=n/2+1;
for(int i=n/2-1;i>=0;i--)
{
g[k]=g[i]; k++;
}
cout<<g;
}
int main()
{
int n,i,j,m;
char g[1000000];
cin>>m;
for(int t=0;t<m;t++)
{
cin>>g;
n=strlen(g);
if(n==1 && g[0]!='9'){cout<<++g[0]; continue;}//single digits except9
int s=0;
int h=0;
if(g[0]=='9' && g[n-1]=='9')
{
for(i=0;i<n;i++)
{
if(g[i]=='9') {h++; }
}
if(h==n)
{
for(i=0;i<=n;i++)
{
if(i==0 || i==n) { cout<<1;}
else {cout<<0;}
}
s=1;
}
}
if(n%2==0 && s==0)
{
i=n/2-1; j=n/2;
while(g[i]==g[j] && i>0)
{
i--; j++;
if(i==0){break;}
}
//if palindrome
if(j==n-1 && g[j]==g[i])
{
if(g[n/2-1]<'9'){ g[n/2-1]++; }
else if(g[n/2]=='9'){(g[n/2-1])='0'; g[n/2-2]+=1;}
evenmirror(g,n);
}//if even string is not palindrome
else
{
if(g[i]<g[j])
{
if(g[n/2-1]<'9'){ g[n/2-1]++; }
else if(g[n/2]=='9'){ g[n/2-1]='0'; g[n/2-2]+=1;}
evenmirror(g,n);
}
else{ evenmirror(g,n); }
}
}
//if odd number string
else if(n%2!=0 && s==0)
{
i=(n/2)-1; j=(n/2)+1;
while(g[i]==g[j] && i>0)
{
i--; j++;
}
//if palindrome
if(j==n-1 && g[j]==g[i])
{
if(g[n/2]<'9'){ g[n/2]++; }
else if(g[n/2]=='9'){ g[n/2]='0'; g[n/2-1]+=1;}
oddmirror(g,n);
}//if odd not palindrome
else
{
char k=n/2+1;
if(g[i]<g[j])
{
if(g[n/2]<'9'){ g[n/2]++; }
else if(g[n/2]=='9'){(g[n/2])='0'; g[n/2-1]+=1;}
oddmirror(g,n);
}
else{ oddmirror(g,n); }
}
}
cout<<endl;
}
return 0;
}
问题是:http://www.spoj.com/problems/PALIN/
我没有
调试您的代码(您没有要求它,我认为无论如何都应该由您完成),但是对于以下输入,我得到了错误的答案:
Input: 9 (expected output 11)
Output: :
祝你好运修复它:)
由于这是一个算法问题,我将尽量保持语言中立。
- 找到下一个回文的简单方法是继续测试,直到找到一个,一次一个。这只是一个循环,一次递增一个并进行测试。
- 回文的测试非常简单。我认为您将其拆分为奇数和偶数情况,使它过于复杂。您可以将数字转换为字符串并检查 reverse() 是否相同,它整洁(因为它在调用中),但需要内存,或者您可以使用两个指针就地执行此操作。一个指针在字符串的开头,一个指针在末尾,每个指针都向中间移动,条件是它们必须显示与另一个相同的字符,当它们都指向中间或已切换相对位置时,循环结束。
相关文章:
- C++:正在检查LinkedList中的回文-递归方法-错误
- Usaco第1.6节主要回文
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 如何创建一个程序来标识最长的子字符串回文,而不考虑字母大小写
- 如果有一个以上的allindromes,找到最长但词典最小的回文
- C++回文检查解决方案被一个测试用例跳闸
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 如何在不使用数学的情况下知道一个数字是否是回文
- 试图在字符串中找到一个数字,更改它,放回并找到下一个数字
- 下一个回文生成器
- 我在不使用string.h的情况下写了一个C++回文.在没有 Do-While 循环的情况下,它可以正常工作.但是当我尝
- 将下一个节点移回功能
- 找到下一个最大的回文数
- 仅删除一个元素以制作字符串回文
- 这个递归函数(回文)变成了一个无限循环
- 使用不同的函数(C++)测试一个数字是否是回文
- 我的回文程序给出了一个例外
- 查找下一个素数回文
- 下一个回文 .奇怪的字符输出