回文词(Uva 401)
来源:互联网 发布:数据线线芯 编辑:程序博客网 时间:2024/06/07 05:14
输入一个字符串,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后与原串相同,如abba和madam。所谓镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。(空白项表示该字符镜像后不能得到一个合法字符。)
输入的每行包含一个字符串,(保证只有上述字符。不含空白字符),判断它是否为回文串和镜像串(共四种组合)。每组数据之后输出一个空行。
样例输入:
NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA
样例输出:
NOTAPALINDROME – is not a palindrome.
ISAPALINILAPASI – is a regular palindrome.
2A3MEAS – is a mirrored string.
ATOYOTA – is a mirrored palindrome.
第一版思路:回文词:新建一个数组存放原串的反转数组,两者用strcmp()比较。
镜像词:由于没有分析清楚镜像词的特点,认为仅仅只需判断字符串中的字符均存在镜像就可以了。
(没用的代码如下:)
#include <stdio.h>#include <string.h>const char mirrored[]="AEHIJLMOSTUVWXYZ12358";const int maxn=10000;const char specialChar[]="EJSZ52L3";int main(){ char str[maxn],reverse[maxn]; bool isPalindrome,isMirrored; memset(str,0,sizeof(str)); memset(reverse,0,sizeof(reverse)); while(scanf("%s",str)==1){ isMirrored=true; int len=strlen(str)-1; for(int i=0;i<strlen(str);i++){ reverse[len--]=str[i]; //复制到另一个数组中,以判断是否为回文词 if(isMirrored&&(strchr(mirrored,str[i])==NULL)) isMirrored=false; //判断是不是镜像词,(第一步,将含有不在mirroed中的字符剔除,第二步见下面补充) } if(strcmp(reverse,str)==0) isPalindrome=true; else isPalindrome=false; ---------- if(isPalindrome&&isMirrored) printf("%s -- is a mirrored palindrome.\n\n",str); else if(isPalindrome&&!isMirrored) printf("%s -- is a regular palindrome.\n\n",str); else if(!isPalindrome&&isMirrored) printf("%s -- is a mirrored string.\n\n",str); else printf("%s -- is not a palindrome.\n\n",str); memset(str,0,sizeof(str)); memset(reverse,0,sizeof(reverse)); } return 0;}
测试的时候,输入 2 ,结果不对。
反思:镜像词在每种意义上是“回文词”,如2AEM3AS,可以看做为:2AEMEA2。所以改进的重心放在了处理镜像不是自己本身的字符上。 在——处插入下面的代码。
(还是没用的代码:)
int j=0; while(isMirrored&&j<=strlen(str)/2){ for(int k=0;k<8;k++){ if(specialChar[k]==str[j]){ if(str[strlen(str)-1-j]!=specialChar[7-k]){//这里的strlen(str)-1不能用len代替,因为在上面的代码中len的值在改变。(这里导致了错误,用输出中间值法找到的。) isMirrored=false; break; } } } j++; }
结果123ES1结果正确,但是123ESI结果不正确。
反思:没有从一开始将镜像词的特点把握。导致出错时又不想重新改变思路,加上考虑不周全,思想漏洞太多,进而继续做很多无用功。
- 回文词(Uva 401)
- uva 401(回文词)
- UVa 401回文词
- UVa 401 回文词
- uva-401 回文词
- UVa 401 回文词
- uva 401 回文词
- UVa OJ 回文词(401)
- UVa 401 Palindromes(回文词)
- 回文词(Palindromes, UVa 401)
- UVa 401 回文词(Palindromes)
- UVa 401 - Palindromes(回文词)
- UVA OJ-401 回文词
- UVa OJ 回文词(401)
- UVA 401 Palindromes 回文词
- UVA 401 Palindromes 回文词
- UVA 401 Palindromes(回文词)
- UVA 401 回文词(30行你信吗)
- ThreadPoolExecutor使用和思考(中)-keepAliveTime及拒绝策略
- Ajax跨域访问(二)
- 1 FreeMarker数据+模型=输出 实例
- 为什么String被设计为final
- opencv学习笔记之xml文件读写
- 回文词(Uva 401)
- [3] Window PowerShell DSC 学习系列----如何在PowerShell DSC 5.x 安装最新的DSC Module?
- JAVA之抽象和封装
- C语言指针变量
- java文件操作
- NYOJ 1170 最大的数
- 环信即时通讯集成过程
- uva202 循环小数
- shell 编程之运算符列表