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.

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    

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.

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

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 
 
 
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int namx = ; bool is_mirrored(char a, char b)
{
if((a == 'E' && b == '') || (a == '' && b == 'E'))
return true;
else if((a == 'L' && b == 'J') || (a == 'J' && b == 'L'))
return true;
else if((a == 'S' && b == '') || (a == '' && b == 'S'))
return true;
else if((a == 'Z' && b == '') || (a == '' && b == 'Z'))
return true;
else if(a == b)
{
if(a == 'A' || a == 'H' || a == 'I' || a == 'M' || a == 'O'
|| a == 'T' || a == 'U' || a == 'V' || a == 'W' || a == 'X'
|| a == 'Y' || a == '' || a == '')
{
return true;
}
}
else
return false;
} int main()
{
char str[namx]; while(scanf("%s%*c", str) != EOF)
{
int len = strlen(str);
//printf("%d\n", len);
bool mark = true;
bool tag = true;
for(int i = ; i <= len / ; ++i)
{
if(str[i] != str[len-i-])
{
mark = false;
//printf("%c == %c %d\n", str[i], str[len-i-1], len-i-1);
break;
}
} for(int i = ; i <= len / ; ++i)
{
if(!is_mirrored(str[i], str[len-i-]))
{
tag = false;
//printf("%c == %c %d\n", str[i], str[len-i-1], len-i-1);
break;
}
}
if(mark == false && tag == false)
printf("%s -- is not a palindrome.\n", str); else if(mark == false && tag == true)
printf("%s -- is a mirrored string.\n", str); else if(mark == true && tag == false)
printf("%s -- is a regular palindrome.\n", str); else
printf("%s -- is a mirrored palindrome.\n", str);
printf("\n"); }
return ;
}

一个空格, PE一晚上,淡定淡定,不要太大压力

在14/11/2队内赛时的代码

 #include <iostream>
#include <cstdio>
#include <cstring> using namespace std;
const int MAXN = ;
char str[MAXN]; bool CharTest(char c)
{
if(c == 'A' || c == 'H' || c == 'I' || c == 'M' || c == 'O' || c == 'T' || c == 'U'
|| c == 'V' || c == 'W' || c == 'X' || c == 'Y' || c == '' || c == '')
{
return true;
}
return false;
} bool StrTest(char *s)
{
int sum = ;
int len = strlen(s);
for(int i = ; i < len; ++i)
{
sum += (CharTest(s[i]) == true) ? : ;
}
if(sum == len)
return true;
return false;
} char transfer(char s)
{
if(s == '')
return 'E';
else if(s == 'J')
return 'L';
else if(s == '')
return 'S';
else if(s == '')
return 'Z';
} int test(char *s, int len)
{
int sum = ;
for(int i = ; i < len/; ++i)
{
if(str[i] == str[len-i-])
{
sum++;
}
}
return sum;
} int main()
{
while(scanf("%s", str) != EOF)
{
int len = strlen(str); if(test(str, len) == len/)
{
if(StrTest(str))
{
printf("%s -- is a mirrored palindrome.\n\n", str);
}
else
{
printf("%s -- is a regular palindrome.\n\n", str);
}
}
else
{
char s1[];
for(int i = ; i < len; ++i)
{
s1[i] = str[i];
}
s1[len] = '\0';
for(int i = ; i < len; ++i)
{
if(str[i] == '' || str[i] == 'J' || str[i] == '' || str[i] == '')
{
str[i] = transfer(str[i]);
}
} if(test(str, len) == len/)
{
printf("%s -- is a mirrored string.\n\n", s1);
}
else
{
printf("%s -- is not a palindrome.\n\n", s1);
}
} }
return ;
}

Uva401Palindromes的更多相关文章

  1. [算法练习] UVA-401-Palindromes

    UVA Online Judge 题目401  Palindromes 回文串 问题描述: 回文串(Palindromes)就是正着读和反着读完全一样的字符串,例如"ABCDEDCBA&qu ...

  2. UVa-401-Palindromes(回文)

    这一题的话我们可以把映像字符的内容给放入一个字符串常量里面,然后开辟一个二维的字符串常量数组,里面放置答案. 对于回文实际上是很好求的,对于镜像的话,我们写一个返回char的函数,让它接收一个char ...

  3. UVA401-Palindromes(紫书例题3.3)

    A regular palindrome is a string of numbers or letters that is the same forward as backward. For exa ...

随机推荐

  1. Hive介绍、安装(转)

    1.Hive介绍 1.1 Hive介绍 Hive是一个基于Hadoop的开源数据仓库工具,用于存储和处理海量结构化数据.它是Facebook 2008年8月开源的一个数据仓库框架,提供了类似于SQL语 ...

  2. python获取指定星期的日期

  3. 转:不再以讹传讹,GET和POST的真正区别

    如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历 前几天有人问我这个问题.我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用. 这个答案好像并不是他想要的.于是他继 ...

  4. .net学习笔记---lambda表达式(自执行方法)

    http://www.cnblogs.com/jesse2013/p/happylambda.html#b034 lambda表达式 http://www.cnblogs.com/OceanEyes/ ...

  5. C#学习笔记----.net操作进程

    进程(Process)是Windows系统中的一个基本概念,它包含着一个运行程序所需要的资源.进程之间是相对独立的,一个进程无法直接访问另一个进程的数据(除非分布式),一个进程运行的失败也不会影响其他 ...

  6. Windows 8使用这半年(企业版)

    2014-06-23 硬件:thinkpad e430c core i5-3210m 4g/500g 1.Windows 8出现开机引导问题 主要开机的时候提示缺少引导文件,按ctrl+alt+del ...

  7. 如何观察JS的事件队列的执行划分

    也就是说,不同的操作函数,操作符,JS将其放入事件队列是不一样的... 比如: 外部函数和内部函数,就是分两次放入事件循环的尾端的. 比如,多个操作符组成的链式操作,也有可能是放不同的操作批次进入事件 ...

  8. [javascript] 使用闭包编写模块

    这是一篇[javascript the good parts]的读书笔记. 我们知道可以利用javascript 的prototype 特性为原始类型编写拓展模块.利用如下方法: Object.pro ...

  9. cmder

    添加cmder到右键菜单 Cmder.exe /REGISTER ALL 打开配置快捷键 win+alt+p 文字重叠 main->font->去掉monospace的勾 λ符号修改 找到 ...

  10. 实时视频应用之QoS关键技术分析

    转自:http://www.aiweibang.com/m/detail/104476372.html?from=p 随着WebRTC标准的逐步推广,实时音视频通讯技术受到越来越多公司和技术人员的关注 ...