题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342

题目意思:判断一行字符串为以下四种的哪一种:A regular palindrome,A mirrored string,A mirrored palindrome 和 is not a palindrome。A regular palindrome 就是我们见得最多的普通回文字符串,正读和反读是一样的;A mirrored string 就是根据以下的一套规则,将每个character变成对应的reverse,变完之后反读起来是和原来的字符串是一样的。

比较坑爹的一个地方是,对于B、C、D、F、G、K...6、7 这些没有reverse的字符,如果字符串里有这些字符,就绝对不是mirrored string了。还有就是记得,输出每一行结果之后,还要追加一个空行!

 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
char s[maxn], rev[maxn];
int len, l; char test[] = {'B', 'C', 'D', 'F', 'G', 'K', 'N', 'P', 'Q', 'R', '', '', '', ''}; // 非 mirrored 的 字符
char match[] = {'E', 'J', 'L', 'S', 'Z', '', '', ''};
char match1[] = {'', 'L', 'J', '', '', 'S', 'E', 'Z'}; bool Is_palindrome()
{
for (int i = ; i <= len/; i++)
{
if (s[i] != s[len-i-])
return false;
}
return true;
} bool check()
{
for (int j = ; j < len; j++)
{
for (int i = ; i <= ; i++)
{
if (s[j] == test[i]) // 找到一个非mirrored 的 字母,就不可能是mirrored string了
return false;
}
}
return true;
} bool Is_mirrored()
{
int f;
l = ;
for (int i = ; i < len; i++)
{
f = ;
for (int j = ; j < ; j++)
{
if (s[i] == match[j])
{
rev[l++] = match1[j]; // 替换该字符的reverse
f = ;
}
}
if (!f) // reverse 与 它本身一样,例如A、I
rev[l++] = s[i];
}
for (int j = l-; j >= ; j--)
if (rev[j] != s[l-j-])
return false;
return true;
} int main()
{
while (scanf("%s", s) != EOF)
{
len = strlen(s);
  if (Is_palindrome())
  {
   if (check() && Is_mirrored())
   printf("%s -- is a mirrored palindrome.\n\n", s);
   else
   printf("%s -- is a regular palindrome.\n\n", s);
   }
   else
   {
  if (check() && Is_mirrored())
  printf("%s -- is a mirrored string.\n\n", s);
   else
  printf("%s -- is not a palindrome.\n\n", s);
  }
}
return ;
}

uva 401 Palindromes 解题报告的更多相关文章

  1. UVa 401 - Palindromes 解题报告 - C语言

    1.题目大意 输入字符串,判断其是否为回文串或镜像串.其中,输入的字符串中不含0,且全为合法字符.以下为所有的合法字符及其镜像: 2.思路 (1)考虑使用常量数组而不是if或switch来实现对镜像的 ...

  2. USACO Section1.5 Prime Palindromes 解题报告

    pprime解题报告 —— icedream61 博客园(转载请注明出处)--------------------------------------------------------------- ...

  3. USACO Section1.2 Dual Palindromes 解题报告

    dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  4. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. USACO Section 1.2 Dual Palindromes 解题报告

    题目 题目描述 有一些数(如 21),在十进制时不是回文数,但在其它进制(如二进制时为 10101)时就是回文数. 编一个程序,从文件读入两个十进制数N.S.然后找出前 N 个满足大于 S 且在两种以 ...

  6. USACO Section 1.5 Prime Palindromes 解题报告

    题目 题目描述 题目就是给定一个区间[a,b]((5 <= a < b <= 100,000,000)),我们需要找到这个区间内所有既是回文串又是素数的数字. 输入样例 5 500 ...

  7. SP7586 NUMOFPAL - Number of Palindromes 解题报告

    SP7586 NUMOFPAL - Number of Palindromes 题意翻译 求一个串中包含几个回文串 输入输出格式 输入格式: The string S. 输出格式: The value ...

  8. UVa 401 Palindromes(镜像回文字符串)

     题意  给一个字符串 判定其是否为回文串和镜像串  回文串非常好推断  镜像串对于每个字符用数组保存它的镜像字符即可了  没有的就是空格 注意若字符串长度为奇数  中间那个字母必须是对称的才是镜 ...

  9. 【LeetCode】906. Super Palindromes 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS解法 相似题目 参考资料 日期 题目地址:ht ...

随机推荐

  1. Oracle8i Internal Services

    http://d.hatena.ne.jp/yohei-a/20091017/1255791152 第1回 Oracle8i Internal Services 1人読書会 Oracle 読んだところ ...

  2. 给button添加长按手势并侦测到此button

    1, 添加手势 self.longPressRecognizer = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@ ...

  3. Window10下Apache2.4的安装和运行

    以前用Python运行的Web框架都是要运行在Linux下,加上WSGI服务器,比如Gunicorn+Flask,后来了解到了Apache,看看能不能基于Apache这个Web服务器下给python提 ...

  4. 【转】supervisord使用

    Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...

  5. MySQL主从复制技术与读写分离技术amoeba应用

    MySQL主从复制技术与读写分离技术amoeba应用 前言:眼下在搭建一个人才站点,估计流量会非常大,须要用到分布式数据库技术,MySQL的主从复制+读写分离技术.读写分离技术有官方的MySQL-pr ...

  6. 近期微信上非常火的小游戏【壹秒】android版——开发分享

    近期在朋友圈,朋友转了一个html小游戏[壹秒],游戏的规则是:用户按住button然后释放,看谁能精准地保持一秒的时间.^_^刚好刚才在linuxserver上调试程序的时候server挂了,腾出点 ...

  7. Unity开发规范(个人习惯,仅供參考)

    近期整理了一下unity里的文件夹使用和脚本上的一些规范,这个看个人习惯,仅供參考 1.unity中的Project文件夹      总体文件夹大致例如以下:            按资源种类分目录. ...

  8. MySQL 查询某个列中同样值的数量统计

    数据如今是这种,我想确定出type列中的news和image....甚至以后有其它值,他们分别有多少个. SELECT type, count(1) AS counts FROM material G ...

  9. Cocos2d-x 避免手工输入项目需要编译的cpp文件到Android.mk里

    手工输入项目需要编译的cpp文件到Android.mk里的缺点 1)繁琐,如果cpp文件很多,简直无法忍受 2)手工输入过程中容易出现错误 3)如果cpp文件更改名称,需要修改Android.mk文件 ...

  10. 工作总结 mvc 调页面传参数 参数值会一直保存 在这个页面上的

    意思是 两个页面均可以 获取到id 和 goodsType 都可以获取 id goodsType post 的 还多带点属性值 form data 页面上带过去的 (新增 编辑)