您的位置:首页 > 其它

uva401(回文串)

2013-05-30 10:52 190 查看
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342

401 - Palindromes

Time limit: 3.000 seconds



Palindromes
A regular palindrome is a string of numbers or letters that is
the same forward as backward. For example, the string
"ABCDEDCBA" is a palindrome because it is the same when
the string is read from left to right as when the string is read
from right to left.

A mirrored string is a string for which when each of the elements
of the string is changed to its reverse (if it has a reverse) and
the string is read backwards the result is the same as the original
string. For example, the string "3AIAE" is a mirrored
string because "A"and "I" are their own reverses,
and "3" and "E"are each others' reverses.

A mirrored palindrome is a string that meets the criteria of a
regular palindrome and the criteria of a mirrored string. The
string "ATOYOTA"is a mirrored palindrome because if the
string is read backwards, the string is the same as the original
and because if each of the characters is replaced by its reverse
and the result is read backwards, the result is the same as the
original string. Of course, "A",
"T","O", and "Y" are all their own
reverses.

A list of all valid characters and their reverses is as
follows.

CharacterReverseCharacterReverseCharacterReverse
AAMMYY
BNZ5
COO11
DP2S
E3Q3E
FR4
GS25Z
HHTT6
IIUU7
JLVV88
KWW9
LJXX
Note that O (zero) and 0 (the letter) are considered the
same character and therefore ONLY the letter "0" is a valid
character.

Input

Input consists of strings (one per line) each of which will consist
of one to twenty valid characters. There will be no invalid
characters in any of the strings. Your program should read to the
end of file.

Output

For each input string, you should print the string starting in
column 1 immediately followed by exactly one of the following
strings.

STRINGCRITERIA
" -- is not
a palindrome."
if the string is
not a palindrome and is not a mirrored string
" -- is a
regular palindrome."
if the string is
a palindrome and is not a mirrored string
" -- is a
mirrored string."
if the string is
not a palindrome and is a mirrored string
" -- is a
mirrored palindrome."
if the string is
a palindrome and is a mirrored string
Note that the output line is to include the -'s
and spacing exactly as shown in the table above and demonstrated in
the Sample Output below.

In addition, after each output line, you must print an empty
line.

Sample Input

NOTAPALINDROME 
ISAPALINILAPASI 
2A3MEAS 
ATOYOTA

Sample Output

NOTAPALINDROME -- is not a palindrome.
 
ISAPALINILAPASI -- is a regular palindrome.
 
2A3MEAS -- is a mirrored string.
 
ATOYOTA -- is a mirrored palindrome.

Miguel Revilla 2001-04-16



题意Palindrome的定义是,一个字符串从左向右和从右向左读是一样的;Mirrored
string的定义是,一个字符串左右对称;Mirrored
palindrome就是既palindrome又mirrored的字符串。对称的关系表题目中已给出。



#include<stdio.h>

#include<string.h>

const char one[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";

const char two[]="A
3 HIL JM O
2TUVWXY51SE Z 8 ";//与one对应的字符表

const int len=35;

bool Palindrome(const char*s)//判断方向,思路巧妙

{

int begin=0,end=strlen(s)-1;

while(begin<=end)

{

if(s[begin]==s[end])

{

begin++;

end--;

}

else

return
false;

}

return true;

}

int pos(char ch)//判断位置

{

for(int i=0;i<len;i++)

{

if(one[i]==ch)

return
i;

}

return len;

}

bool Mirror(const char*s)//判断镜像

{

int begin=0,end=strlen(s)-1;

while(begin<=end)

{

int
tmp=pos(s[begin]);//返回输入字符串中字符在串中的位置。

if(s[end]==two[tmp])//is read
backwards the result is the same as the original string

{

begin++;

end--;

}

else

return
false;

}

return true;

}

int main()

{

char str[1100];

while(scanf("%s",str)!=EOF)

{

bool a=false,b=false;

a=Palindrome(str);

b=Mirror(str);

if(a&&b)

printf("%s --
is a mirrored palindrome.\n",str);

else if(a)

printf("%s --
is a regular palindrome.\n",str);

else if(b)

printf("%s --
is a mirrored string.\n",str);

else

printf("%s --
is not a palindrome.\n",str);

printf("\n");

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: