Uva401Palindromes
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的更多相关文章
- [算法练习] UVA-401-Palindromes
UVA Online Judge 题目401 Palindromes 回文串 问题描述: 回文串(Palindromes)就是正着读和反着读完全一样的字符串,例如"ABCDEDCBA&qu ...
- UVa-401-Palindromes(回文)
这一题的话我们可以把映像字符的内容给放入一个字符串常量里面,然后开辟一个二维的字符串常量数组,里面放置答案. 对于回文实际上是很好求的,对于镜像的话,我们写一个返回char的函数,让它接收一个char ...
- UVA401-Palindromes(紫书例题3.3)
A regular palindrome is a string of numbers or letters that is the same forward as backward. For exa ...
随机推荐
- 解药还是毒药(codevs 2594)
2594 解药还是毒药 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Smart研制出对 ...
- MysqlDumpslow
可以帮助分析慢查询. 选项: -n 10 列出最近10条慢查询 如: mysqldumpslow
- StoryBoard和代码结合 按比例快速兼容iPhone6/6 Plus教程
转:http://www.cocoachina.com/ios/20141230/10800.html 编者注:根据网友们的评论,文章中的方法有很大的局限性,请谨慎使用! 现在由于苹果公司出了6和6 ...
- html练习
border-left:100px solid transparent; 左边框隐藏 transform:rotate(45deg); div旋转45度 用css做一个三角形 <sty ...
- 【PHP用户的错误日志】
将产生的错误保存在日志中的方法:使用error_log方法,其中,当日志类型是3的时候,下一个参数将会是日志文件的保存路径 使用示例: <?php function myerror($level ...
- DevExpress DXperience 的本地化(汉化)方法
Devexpress的.net组件目前非常流行,在国内开发者中有非常高的热度,但是由于是国外控件,我们经常遇到的一个问题是汉化.目前Devexpress公司2011.2版以后使用了统一的本地化模式,针 ...
- 运维自动化之ansible的安装与使用(包括模块与playbook使用)(转发)
原文 http://dl528888.blog.51cto.com/2382721/1435415 我使用过puppet(地址是http://dl528888.blog.51cto.com/2382 ...
- 解决android expandablelistview 里面嵌入gridview行数据重复问题
最近做了一个“csdn专家博客App” 当然了是android版本,在专家浏览页面,我才用了expandablelistview 组件来显示专家分类,每个分类点击之后可以显示专家的头像和名字. 很简单 ...
- python 文件操作总结
Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...
- python 定义类方法
定义类方法 和属性类似,方法也分实例方法和类方法. 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身. 要在class中定义类方法,需要这么写: class Person( ...