/*******************************************
Problem:UVA OJ-401 Palindromes
Date:11/07/2014
Author:Praker
********************************************/
#include <stdio.h>
#include <string.h>
#define maxn 10000
char str[maxn];
char ch_1[14]="AHIMOTUVWXY18";
char ch[22]="AEHILJMOSTUVWXYZ12358";
char chRe[22]="A3HILJMO2TUVWXY51SEZ8";
int is_P(char* str,int n);
int is_M(char* str,int n);
int hasRe_1(char c);
int hasRe(char c);
char getRe(char c);
int main()
{
while(gets(str)!=NULL)
{
int len=strlen(str);
if(len==0)
break;
int isMirro=0,isPalin=0;
int i=0;
isPalin=is_P(str,len);
isMirro=is_M(str,len);
if(isPalin==0)
{
if(isMirro==0)printf("%s--is not a palindrome.\n\n",str);
else printf("%s--is a mirrored string.\n\n",str);
}
else
{
if(isMirro==0)printf("%s--is a regular palindrome.\n\n",str);
else printf("%s--is a mirrored palindrome.\n\n",str);
}
}
}
int is_P(char* str,int n)
{
int i;
for(i=0;i<n/2;i++)
if(str[i]!=str[n-1-i])
return 0;
return 1;
}
int is_M(char* str,int n)
{
if(n==1)
{
if(hasRe_1(str[0]))
return 1;
else
return 0;
}
for(int i=0;i<n/2;i++)
{
if(hasRe(str[i]))
{
char t=getRe(str[i]);
if(t!=str[n-1-i])
return 0;
}
else
return 0;
}
if(n%2!=0)
{
int x=n/2;
if(hasRe_1(str[x]))
return 1;
else
return 0;
}
return 1;
}
int hasRe_1(char c)
{
int has=0;
for(int i=0;i<13;i++)
if(ch_1[i]==c)
has=1;
return has;
}
int hasRe(char c)
{
int has=0;
for(int i=0;i<22;i++)
if(ch[i]==c)
has=1;
return has;
}
char getRe(char c)
{
for(int i=0;i<22;i++)
if(ch[i]==c)
return chRe[i];
}
UVa OJ 回文词(401)
最新推荐文章于 2024-09-11 19:54:50 发布