uva401(回文串)
2013-05-30 10:52
190 查看
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342
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.
Note that O (zero) and 0 (the letter) are considered the
same character and therefore ONLY the letter "0" is a valid
character.
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.
column 1 immediately followed by exactly one of the following
strings.
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.
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;
}
401 - Palindromes
Time limit: 3.000 secondsPalindromes
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.
Character | Reverse | Character | Reverse | Character | Reverse |
A | A | M | M | Y | Y |
B | N | Z | 5 | ||
C | O | O | 1 | 1 | |
D | P | 2 | S | ||
E | 3 | Q | 3 | E | |
F | R | 4 | |||
G | S | 2 | 5 | Z | |
H | H | T | T | 6 | |
I | I | U | U | 7 | |
J | L | V | V | 8 | 8 |
K | W | W | 9 | ||
L | J | X | X |
same character and therefore ONLY the letter "0" is a valid
character.
Input
Input consists of strings (one per line) each of which will consistof 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 incolumn 1 immediately followed by exactly one of the following
strings.
STRING | CRITERIA |
" -- 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 |
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;
}
相关文章推荐
- UVA 401 Palindromes 回文串和镜像串
- UVa 401 Palindromes (回文串与镜像串的综合判断)
- UVA 401 - Palindromes(判断回文串和镜像串)
- uva401 Palindromes(回文串判断 水题)
- UVA401(回文串好题)
- UVA - 401 Palindromes (回文串)
- 回文串和镜像串,组合不同,下标为何*2 。 UVA 401 Palindromes 回文词
- UVa 401 - Palindromes
- UVA 401 - Palindromes
- uva 11594 划分回文串
- UVa401 Palindromes
- UVa401_Palindromes(小白书字符串专题)
- UVA 11584 划分回文串
- UVA 题目401 - Palindromes JAVA版
- UVa 401 - Palindromes
- UVa 401 - Palindromes(回文词)
- uva 10716 Evil Straw Warts Live(贪心回文串)
- UVa 401 - Palindromes
- 回文词(Uva 401)
- UVa 401 Palindromes (字符串匹配)