UVaOJ 401 Palindromes
原题:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=6&page=show_problem&problem=342
题目大意:
文中规定描述了如下三个概念:
1) “regular palindrome(常规回文)”: 从前往后读与从后往前读是一样的。
2) “mirrored string(镜式串)”: 对于字符串的中轴呈轴对称。
3) “mirrored palindrome(镜式回文)”: 同时满足1) 、2)条件的串。
对于镜式串的定义,还给出了有效的原字符及其对应的翻转字符表。
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 |
注意,原题中说字母“o”和数字“0”可以看作相等的字符,因此只有字母“o”是合法字符。题意没错,只是把“o”和“0”打错了。
要求我们根据给出的长度1~20的字符串,判断其相应的类型,并输出规定的结果。
解题分析:
一道普通的字符串处理类的题目。判断类型的题目,我倾向于设置类型标识。根据处理得到的标识得到其类型。
伪代码:
1 保存原字符与翻转字符的对应关系。
2 判断是否为回文串。
2.1 是 -> 添加回文串标志。
2.2 不是 -> 空操作。
3 判断是否为镜式串。
3.1 是 ->添加镜式串标志。
3.2 不是 -> 空操作。
4 根据类型标志判断给定串的类型,输出相应结果。
源码:
/* * File: main.cpp * Author: lostaway * * Created on April 5, 2010, 11:29 PM */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* * */ //characters and their reverses table. char CTable[30] = {'A', 'E', 'H', 'I', 'J', 'L', 'M', 'O', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '5', '8'}, RTable[30] = {'A', '3', 'H', 'I', 'L', 'J', 'M', 'O', '2', 'T', 'U', 'V', 'W', 'X', 'Y', '5', '1', 'S', 'E', 'Z', '8'}, input[30]; const int CRTableLen = 21; //功能:判断str串是否为回文串 int isPalindrome(char str[], int leftStart, int rightStart) { int i = leftStart, j = rightStart; while(1) { if(str[i] != str[j]) { return 0; } i--; j++; if(i < 0) { return 1; } } } //功能: 判断字符a的翻转字符是否为字符b int isReverse(char a, char b) { int i; for(i = 0; i < CRTableLen; i++) { if(a == CTable[i] || a == RTable[i]) { break; } } if(i >= CRTableLen) //this letter didn't has a reverse letter. { return 0; } if(a == CTable[i]) { if(b == RTable[i]) { return 1; } else { return 0; } } else if(a == RTable[i]) { if(b == CTable[i]) { return 1; } else { return 0; } } else { return 0; //只是为了让所有分支都有返回值,去除警告。 } } //功能: 判断串str是否为镜式串 int isMirrored(char str[], int leftStart, int rightStart) { int i = leftStart, j = rightStart; while(1) { if(isReverse(str[i], str[j]) == 0) { return 0; } i--; j++; if(i < 0) { return 1; } } } //功能: 根据tag标志输出相应的结果 void print(int tag) { switch(tag) { case 0: { printf("%s -- is not a palindrome./n", input); break; } case 1: { printf("%s -- is a regular palindrome./n", input); break; } case 10: { printf("%s -- is a mirrored string./n", input); break; } case 11: { printf("%s -- is a mirrored palindrome./n", input); break; } } printf("/n"); } int main(int argc, char** argv) { freopen("input.txt", "r", stdin); int middle, tag, leftStart, rightStart, len; while(scanf("%s", input) != EOF) { len = strlen(input); /* tag == 0 : is not a palindrome. * tag == 1 : is a regular palindrome. * tag == 10 : is a mirrored string. * tag == 11 : is a mirrored palindrome. */ tag = 0; middle = len / 2; if(len % 2 == 0) //划分奇、偶串 { leftStart = middle - 1; rightStart = middle; } else { leftStart = middle; rightStart = middle; } if(isPalindrome(input, leftStart, rightStart)) { tag += 1; } if(isMirrored(input, leftStart, rightStart)) { tag += 10; } print(tag); } return (EXIT_SUCCESS); }
UVaOJ 401 Palindromes相关推荐
- UVAoJ --401
UVAoJ –401 这是第一次写的代码,编写两个函数分别判断镜像和回文,然后就是两个结果的排列组合了,根据结果不同输出不同的判断,但是以下这段代码的结果却是WA.还在理解中 #include < ...
- uva 401.Palindromes
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...
- UVa 401 - Palindromes
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=96&page=s ...
- 紫书《算法竞赛入门经典》
紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...
- 提取了下刘汝佳推荐的题号...
今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started 10055 - Hashmat the Brave Warrior ...
- SUPERBIN技术周刊第6期
本技术周刊是以周为单位作为里程碑,记录一个程序员视角下的所见,所学,所想.兴趣领域包括:数学,算法,图形,图像,音视频,AI,游戏,软件开发技术,操作系统,开源,以及生活杂记等."不积跬步, ...
- uvaoj-401-Palindromes
比较简单的题目,WA了一次是没看清英文题目的要求. /*uvaoj: 401PROB: Palindromes */ #include<stdio.h> #include<strin ...
- UVA401 Palindromes【字符串】
Palindromes UVA - 401 题目传送门 题目大意:给你一个字符串,判断其是回文串还是镜像串. AC代码: #include <cstdio> #include <io ...
- 【APIO2014】Palindromes
#103. [APIO2014]Palindromes 统计 描述 提交 自定义测试 给你一个由小写拉丁字母组成的字符串 ss.我们定义 ss 的一个子串的存在值为这个子串在 ss 中出现的次数乘以这 ...
最新文章
- COJN 0575 800601滑雪
- 群雄逐鹿,谁会赢得自动驾驶之战?
- CocosEditor 1.0Final-IDEA13.0和1.5-IDEA13.1 发布–2014.03.25
- Eclipse显示内存占用
- java 图的邻接矩阵表示,深度优先遍历,广度优先遍历
- Linux下C语言串口应用编程,Linux下串口C语言编程
- Ogg入门--基本命令
- C#LeetCode刷题之#590-N叉树的后序遍历(N-ary Tree Postorder Traversal)
- hadoop运维之jobtracker无故停止服务
- C++实现LRU算法(LeetCode 146 LRU缓存机制)
- Kruskal/prim--最小生成树
- 基于OpenCV的红绿灯识别代码解析
- 最好用的五大服装进销存管理软件,强推第一个
- 区块链软件公司:区块链的不可篡改贴合司法存证需求
- 网络PPTP协议代理加速器的应用
- 【Tools】OBS Studio录制视频教程
- 【WebGIS bug】WARNING: Too many active WebGL contexts. Oldest context will be lost.
- 【工控】脉冲当量怎么算?
- html怎样让图片自动转圈,html5怎样做出图片转圈的动画效果
- Dockerfile镜像创建
热门文章
- D. Array and Operations
- vim快速设置自动缩进
- [vba] 函数返回多个值
- 机器学习:算法中的泛化误差、偏差、方差、噪声的理解(超详细)
- 【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验
- Mac2019-XcodeVS安装指南_建立C探索日记
- 【IoT】加密与安全:动态令牌 OTP、HOTP、TOTP 原理解析
- 精选的Python框架,库,软件和资源的精选清单【墙裂推荐收藏】
- 【路径规划】蚁群算法求解电动汽车充电站与换电站协调路径规划【含GUI Matlab源码 796期】
- 人的一生,在追求什么?