题目链接:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=19520
题目大意:给你一个字符串,一要你判断是否是回文串;二要把这个字符串的每一个字符按照给定的规则翻转,而然后判断翻转后的字符串是否是原串的逆序。
思路不难,但是有些地方要注意。首先要注意的一个问题是,大写字母O和数字0是一样的。这一点我觉得题目的表述不妥,按照我对题目的理解,数字0是无效的,应该是不会出现的,但是结果跟我的理解不一样。然后就是如果串中含有不能翻转的字母,那么是不能成为mirrored string的,我把不能翻转的字母的翻转字母记为-1。
具体代码:
题目大意:给你一个字符串,一要你判断是否是回文串;二要把这个字符串的每一个字符按照给定的规则翻转,而然后判断翻转后的字符串是否是原串的逆序。
思路不难,但是有些地方要注意。首先要注意的一个问题是,大写字母O和数字0是一样的。这一点我觉得题目的表述不妥,按照我对题目的理解,数字0是无效的,应该是不会出现的,但是结果跟我的理解不一样。然后就是如果串中含有不能翻转的字母,那么是不能成为mirrored string的,我把不能翻转的字母的翻转字母记为-1。
具体代码:
#include<stdio.h> #include<ctype.h> #include<string.h> char reverseNum[]={'0','1','S','E',-1,'Z',-1,-1,'8',-1}; char reverseLetter[]={'A',-1,-1,-1,'3',-1,-1,'H','I','L',-1,'J','M',-1,'O',-1,-1,-1,'2','T','U','V','W','X','Y','5'}; bool isPalindrome(char *str) { int i,len=strlen(str); for(i=0;i<len/2;i++) { if(str[i]=='0'&&str[len-i-1]=='O'||str[i]=='O'&&str[len-i-1]=='0') continue; if(str[i]!=str[len-i-1]) break; } if(i<len/2) return 0; else return 1; } bool isMirrored(char *str) { int i,len=strlen(str); for(i=0;i<(len+1)/2;i++) if(isalpha(str[i])) { if(str[i]=='O'&&str[len-i-1]=='0') continue; if(reverseLetter[str[i]-'A']==-1||reverseLetter[str[i]-'A']!=str[len-i-1]) break; } else { if(str[i]=='0'&&str[len-i-1]=='O') continue; if(reverseNum[str[i]-'0']==-1||reverseNum[str[i]-'0']!=str[len-i-1]) break; } if(i<(len+1)/2) return 0; else return 1; } int main() { int p,m; char str[2000]; while(gets(str)) { p=m=0; if(isPalindrome(str)) p=1; if(isMirrored(str)) m=1; if(p&&m) printf("%s -- is a mirrored palindrome.\n\n",str); else if(p) printf("%s -- is a regular palindrome.\n\n",str); else if(m) printf("%s -- is a mirrored string.\n\n",str); else printf("%s -- is not a palindrome.\n\n",str); } return 0; }
发表评论
-
UVa 10422 Knights in FEN
2012-09-07 08:40 937题目:http://uva.onlinejudge.org/i ... -
UVa 539 The Settlers of Catan
2012-08-31 22:22 28题目:http://uva.onlinejudge.org/i ... -
UVa 301 Transportation
2012-08-31 22:10 34题目:http://uva.onlinejudge.org/i ... -
UVa 639 Don't Get Rooked
2012-08-30 23:01 850题目:http://uva.onlinejudge.org/i ... -
UVa 216 Getting in Line
2012-08-29 20:48 758题目:http://uva.onlinejudge.org/i ... -
UVa 10474 Where is the Marble?
2012-08-28 13:45 883题目:http://uva.onlinejudge.org/i ... -
UVa 592 Island of Logic
2012-08-27 11:05 1679题目:http://uva.onlinejudge ... -
UVa 11205 The broken pedometer
2012-08-25 17:28 1089题目:http://uva.onlinejudge.org/i ... -
UVa 131 The Psychic Poker Player
2012-08-24 22:28 905题目:http://uva.onlinejudge.org/i ... -
UVa 729 The Hamming Distance Problem
2012-08-24 12:18 731题目:http://uva.onlinejudge.org/i ... -
Uva 10098 Generating Fast
2012-08-23 15:28 688题目:http://uva.onlinejudge.org/i ... -
UVa 146 ID Codes
2012-08-20 18:46 801题目:http://uva.onlinejudge.org/i ... -
UVa 10167 Birthday Cake
2012-08-16 20:57 634题目:http://uva.onlinejudge.org/i ... -
UVa 10129 Play on Words
2012-08-15 22:49 1180题目:http://uva.onlinejudge.org/i ... -
UVa 10596 Morning Walk
2012-08-14 22:05 919题目:http://uva.onlinejudge.org/i ... -
Uva 10305 Ordering Tasks
2012-08-13 23:40 694题目:http://uva.onlinejudge.org/i ... -
Uva 10004 Bicoloring
2012-08-13 23:34 912题目:http://uva.onlinejudge.org/i ... -
Uva 532 Dungeon Master
2012-08-13 23:29 820题目:http://uva.onlinejudge ... -
Uva 439 Knight Moves
2012-08-11 22:24 690题目:http://uva.onlinejudge.org/i ... -
UVa 784 Maze Exploration
2012-08-11 14:09 881题目:http://uva.onlinejudge.org/i ...
相关推荐
总的来说,"UVaOJ-401(Palindromes)"是一个基础的编程挑战,旨在考察开发者对字符串处理的理解以及基本算法的实现能力。通过解决这个问题,程序员可以提升其编程技巧,尤其是处理字符串问题的能力。
字符串题目记录 字符串题目记录是 ACM 题目中的一种常见类型,涉及到字符串处理、哈希、后缀数组、KMP 算法等多种知识点。下面是对标题、描述、标签和部分内容的详细解释和知识点总结。 标题:字符串题目记录 该...
总的来说,Python的字符串操作和字典遍历是编程中常见的基础技能。理解并熟练掌握这些概念对于编写高效且易于维护的代码至关重要。在"python判断回文字符串-09-字典的循环遍历之键值对.ev4.mp4"这个视频教程中,你将...
在编程中,处理回文的算法通常涉及到字符串处理、比较和遍历等基础知识。 源码通常是程序员用特定编程语言编写的程序或函数,用于实现特定功能。在这个例子中,我们可以推测源码可能包含了检查字符串是否为回文的...
第一种解决方案使用了静态数组和字符指针来实现回文数的检查。第二种解决方案使用了iostream和string头文件来实现输入输出操作。 知识点四:文件输入输出 在这个题目中,我们需要从文件中读取输入数据,并将结果...
zoj 1325 Palindromes.md
poj 3376 Finding Palindromes.md
回文是一种特殊的字符串,它正读反读都一样,例如"madam"、"racecar"和"12321"。在这个名为"Palindromes"的项目中,我们有一个简单的Java应用程序,它的目的是识别并找出输入文本中的最大回文。该项目可以帮助初学者...
5. **Palindromes(回文字符串)** 回文字符串是指正读反读都一样的字符串。检测一个字符串是否为回文,可以使用双指针法,一个指针从头开始,另一个从尾部开始,同时向中间移动,比较对应位置的字符是否相同。如果...
P1217 [USACO1.5] 回文质数 Prime Palindromes
解决方案展示了这样的CFG是如何形成的,包含了一个初始变量(起始符号)S和一组产生规则,例如 S→aSa、S→bSb、S→a 等,能生成字符串如 abbaba,这些字符串前后读起来是相同的。 问题3.1.9要求通过展示CFG来证明...
编写一个递归函数testPalindrome,如果存储在数组中的字符串是回文,则返回1,否则返回0。 该函数应忽略字符串中的空格和标点符号。 分级标准 正确性和完整性70% 程序输出和测试15% 程序组织和源代码管理10% ...
这段代码首先将数字n转换为字符串,然后使用切片操作`[::-1]`来反转字符串,并与原字符串进行比较。如果两者相同,那么n就是回文数。 在处理大数据时,为了提高效率,我们可以采用双指针法。设立两个指针,一个从...
在编程领域,回文数算法通常用于解决数学问题或进行字符串处理。下面将详细介绍如何实现回文数算法以及如何找到一个数字前后最近的回文数。 首先,我们来探讨如何判断一个数字是否为回文数。这个过程可以通过将数字...
4. "palindromes":这是一个关于回文的题目,可能需要识别或生成字符串中的回文子串,涉及到字符串操作和算法设计。 5. "Sum Up":这可能是要求计算一系列数字的和,可能涉及到高精度计算、动态规划或者快速求和算法...
USACO的题目通常涵盖算法和数据结构的不同方面,包括但不限于贪心算法、动态规划、图论、字符串处理和复杂度分析等。 根据提供的文件内容,我们可以提炼出USACO中的一些重要知识点,这些知识点有助于参赛者在面对...
14. 字符串变回文(String Palindromes) 给定一个字符串,找到最少需要添加多少个字符才能使它变为回文。这个问题可以通过动态规划来解决。 15. 最长公共子串(LCS) 最长公共子串问题是找出两个字符串中长度最长的...
给定一个字符串,编写一种算法以计算字符串中回文率的单词数。 输出中必须包含回文列表和回文数列表。 输入: "Dad gave mom a Tesla as a racecar" 输出: Dad, mom, racecar, 3 Palindromes 解释哈希表如何工作。...
此类题目通常涉及到字符串操作和转换,需要找到从一个字符串转换到另一个字符串所需的最小步骤数。这通常可以通过构建一个状态空间图并寻找最短路径来解决,类似于编辑距离问题。 #### Name That Number 此题要求...
判断一个数是否为回文,可以将其转换为字符串,然后比较字符串的首尾字符,依次向中间移动,如果所有对应位置的字符都相同,则为回文数。 在ACM(国际大学生程序设计竞赛)中,构造法是一种解决问题的方法,它通过...