这道题目也挺水的,题目说的很清楚,判断是不是mirrored string的时候有些费事,但是也不算太费事。
建立一个数组,满足a数组,同时也满足b数组既是mirrored string。
不过这道题目有个地方很恶心人,就是每组数据之间有个空行,在这里WA了一次,我有点疑问,uva怎么不判断PE 啊,按照常理来说这样的错误应该是PE啊。
#include<stdio.h>
#include<string.h>
int is_p(char *str)
{
int n,i;
n=strlen(str);
for(i=0;i<n/2;i++)
{
if(str[i]!=str[n-i-1])
return 0;
}
return 1;
}
int is_m(char *str)
{
char a[21]="AEHIJLMOSTUVWXYZ12358";
char b[21]="A3HILJMO2TUVWXY51SEZ8";
int i,j,n;
n=strlen(str);
if(n==1)
{
for(i=0;i<21;i++)
{
if(str[0]==a[i])
break;
}
if(i==21||str[0]!=b[i])
return 0;
else
return 1;
}
else
{
for(i=0;i<n/2+1;i++)
{
for(j=0;j<21;j++)
{
if(str[i]==a[j])
break;
}
if(j==21||str[n-i-1]!=b[j])
return 0;
}
return 1;
}
}
int main()
{
int n1,n2;
char str[100000];
while(gets(str)!=NULL)
{
n1=is_p(str);
n2=is_m(str);
if(n1==1)
{
if(n2==1)
printf("%s -- is a mirrored palindrome.\n\n",str);
else
printf("%s -- is a regular palindrome.\n\n",str);
}
else
{
if(n2==1)
printf("%s -- is a mirrored string.\n\n",str);
else
printf("%s -- is not a palindrome.\n\n",str);
}
}
return 0;
}