回文数是指数位上的数字顺序读和逆序读都一样。现有一串 N 个数字的数,请输出该数字串中最长的回文数,如果长度相等的有多串,请输出第一次出现的。
输入格式
第1行,1个整数N,范围在[1…1000]。
第2行,N 个数字,每个数字用空格分开。
输出格式
一行,剩余的回文数。
输入/输出例子1
输入:
5
1 2 3 2 2
输出:
2 3 2
输入/输出例子2
输入:
8
4 3 2 6 6 2 0 4
输出:
2 6 6 2
样例解释
无
这题呢,稍微有点排序的思想,别看他数据范围那么大,其实就是个纸老虎,暴力就行了。
还有,不要忘记一个变量也是一个回文数。
具体代码如下:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,a[1005],ans,poss;
string s,t1,t2;
int main(){
cin>>n;
for(ll i=1;i<=n;i++)
{
cin>>a[i];
s+=char(a[i]+int('0'));
}
for(ll i=1;i<=n;i++)
{
for(ll j=i;j<=n;j++)
{
t1=s.substr(i-1,j-i+1);//从s中截取一小段
t2=t1;
reverse(t2.begin(),t2.end());//倒叙
if(t2==t1)//判断回文数
{
if(j-i+1>ans)
{
ans=j-i+1;
poss=i;
}
}
}
}
for(int i=poss;i<=poss+ans-1;i++)
{
cout<<a[i]<<" ";
}
return 0;
}