UVa 401 Palindromes(常量数组+遍历)
来源:互联网 发布:三端口环形器 编辑:程序博客网 时间:2024/06/06 20:53
原题地址
https://vjudge.net/problem/UVA-401
题意:判断输入的字符串是否满足回文、镜像。
回文即从左往右读和从右往左读的序列一样,镜像即可以通过翻转规则从一个字符变成另一个字符,如(3,E),(J-L)等。
解题思路
本题是《算法竞赛入门经典》的例题3-3,题目很简单,值得注意的是常量数组的妙用。
- 判断回文串很简单,只要遍历字符串,判断字符str[i]和字符str[len-1-i]是否相等,如果存在一个不相等的情况,则非回文串。
- 判断镜像串前,先把所有合法字符(字母和数字1-9,数字0不合法)的镜面字符存到常量字符串rev中,字母对应下标0-25,数字对应下标26-34,遍历时,判断字符str[i]和字符str[len-1-i]的镜面字符是否相等,如果存在一个不相等的情况,即非镜像串。
- 用pflag来记录输入串是否满足Palindrome,mflag来记录是否满足mirrored,一共有(00,01,10,11)这四种情况,由于四种情况各有输出的形式,所以根据2*p+m的值来选取输出形式msg。
AC代码
#include "stdio.h"#include "stdlib.h"#include "string.h"#include "ctype.h"#define MAXN 25const char rev[] = "A 3 HIL JM O 2TUVWXY51SE Z 8 "; //数字0非法const char* msg[] = //两种flag的组合情况对应的输出后缀{ " -- is not a palindrome.\n", //pflag=0, mflag=0 " -- is a mirrored string.\n", //pflag=0,mflag=1 " -- is a regular palindrome.\n", //pflag=1,mflag=0 " -- is a mirrored palindrome.\n" //pflag=1,mflag=1};char reversed(char c){ if (isdigit(c)) return rev[c-'0'+25]; //数字(1-9)的索引从26开始 else return rev[c-'A']; }int main(int argc, char const *argv[]){ char str[MAXN]; while (~scanf("%s",str)) { int pflag = 1, mflag = 1; int len = strlen(str); for (int i = 0; i<len; ++i) { if (str[i] != str[len-1-i]) //违反回文规则 pflag = 0; if (str[i] != reversed(str[len-1-i])) //违反镜像规则 mflag = 0; } printf("%s", str); //源字符串 printf("%s\n", msg[2*pflag + mflag]); //输出后缀 } return 0;}
0 0
- UVa 401 Palindromes(常量数组+遍历)
- <常量数组> UVA 401
- UVA 401 - Palindromes(字符串)
- uva 401 Palindromes(字符串处理)
- UVa 401 Palindromes(回文词)
- uva 401 Palindromes(字符串回文处理)
- UVA 401-- Palindromes(串处理)
- UVA - 401 Palindromes (回文串)
- 回文词(Palindromes, UVa 401)
- UVa 401 Palindromes(简单字符串)
- UVa 401 回文词(Palindromes)
- UVa 401 Palindromes
- UVa OJ 401-Palindromes
- UVa:401 - Palindromes
- uva 401 Palindromes //字符串
- uva 401 - Palindromes
- UVa 401 - Palindromes
- UVa 401 - Palindromes
- Machine Learning第二讲[多变量线性回归] -(二)计算参数分析
- ADO.NET连接字符串大全
- POJ 1995 Raising Module Numbers
- 如何用9行Python代码编写一个简易神经网络
- [More Effective C++]]指针与引用的区别
- UVa 401 Palindromes(常量数组+遍历)
- 线程范围内共享数据(二)
- Eclipse中Android项目运行时出现Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse l
- ZOJ
- OpenCV中Hough检测直线中pt1、pt2点的确定
- get,and Post请求区别
- http://www.runoob.com/ 学习网址
- 简单聊聊HDFS的federation
- 考试(三)