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. 理解Miller-Rabbin算法

    转自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且( ...

  2. 玩转Java对象和XML相互转换

    最近在项目中一直出现Java对象和XML之间的相互转换,一开始由于项目很庞大,我又是临时调度过去,导致在按照项目组长的要求进行写代码的同时,总是在这块云里雾里,最近才慢慢开始搞清楚项目中具体的使用缘由 ...

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

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

  4. SQLServer内置函数

    类型转换函数cast和convert --cast一般更容易使用,convert的优点是可以格式化日期和数值 select CAST('123.4' as int) --失败 select CONVE ...

  5. Redis笔记(五)Redis的事务

    >>关系型数据库的事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消. Atomic(原子性): 一个事务(transaction)中的 ...

  6. Spring.Net学习之简单的知识点(一)

    1.Spring.Net是一个开源的应用程序框架,可以简化开发主要功能(1)实现控制反转(IOC/DI),也就是不要直接new,依赖于接口(2)面向切面编程(AOP),就是向程序中利用委托注册事件简单 ...

  7. Jquery自定义扩展方法(二)--HTML日历控件

    一.概述 研究了上节的Jquery自定义扩展方法,自己一直想做用jquery写一个小的插件,工作中也用到了用JQuery的日历插件,自己琢磨着去造个轮子--HTML5手机网页日历控件,废话不多说,先看 ...

  8. sdut 2125串结构练习--字符串匹配【两种KMP算法】

    串结构练习——字符串匹配 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sduto ...

  9. ArcGIS ElementLayer上放置Windows控件

    ElementLayer是ArcGIS API for Silverlight/WPF中的一种图层类型,主要用来承载Silverlight/WPF中的UIElement对象(UIElement),使用 ...

  10. JqueryEasyUI 解决IE下datagrid无法刷新的问题 分类: JavaScript JqueryEasyUI 2014-09-20 10:05 510人阅读 评论(1) 收藏

    问题描述: 在使用JqueryEasyUI 时,发现在IE下$('#table').datagrid('reload');无效,数据并没有被刷新,究其原因,是因为刷新时,datagrid请求的url没 ...