/*******************************************
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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.