UVa 401 - Palindromes -AC
来源:互联网 发布:七天网络查分怎样查分 编辑:程序博客网 时间:2024/05/29 16:10
这道题看完题思路大致清晰,总体分开两个函数写,一个判断回文串,一个判断镜像串。
回文串判断好写,循环判断前半截与后半截是否一致即可。
关键在判断镜像串,一开始就也没多想,简单的判断呗~虽然知道要写好多,但也懒得细想。先判断字符串中有没有不是镜像字符的,有就直接返回0,没有再依次判断对称位置上的镜像字符是否对应,有不对应的就直接返回0,全都对应最后返回1.
虽然直接AC了,但这样写完了190行,突然感觉我好傻~
先贴出来吧~
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_SIZE 10005int pal(char str[MAX_SIZE])//palindrome{ int i,j,slen; slen=strlen(str); for (i=0,j=slen-1;i<slen/2;i++,j--) if (str[i]!=str[j]) break; if (i==slen/2) return 1; return 0;}int mir (char str[MAX_SIZE])//mirrored{ int i,j,slen; slen=strlen(str); for (i=0;i<slen;i++) { switch (str[i]) { case 'B': return 0; case 'C': return 0; case 'D': return 0; case 'F': return 0; case 'G': return 0; case 'K': return 0; case 'N': return 0; case 'P': return 0; case 'Q': return 0; case 'R': return 0; case '4': return 0; case '6': return 0; case '7': return 0; case '9': return 0; } } for (i=0;i<slen/2;i++) { switch(str[i]) { case 'A': if (str[slen-i-1]=='A') continue; else return 0; case 'E': if (str[slen-i-1]=='3') continue; else return 0; case 'H': if (str[slen-i-1]=='H') continue; else return 0; case 'I': if (str[slen-i-1]=='I') continue; else return 0; case 'J': if (str[slen-i-1]=='L') continue; else return 0; case 'L': if (str[slen-i-1]=='J') continue; else return 0; case 'M': if (str[slen-i-1]=='M') continue; else return 0; case 'O': if (str[slen-i-1]=='O') continue; else return 0; case 'S': if (str[slen-i-1]=='2') continue; else return 0; case 'T': if (str[slen-i-1]=='T') continue; else return 0; case 'U': if (str[slen-i-1]=='U') continue; else return 0; case 'V': if (str[slen-i-1]=='V') continue; else return 0; case 'W': if (str[slen-i-1]=='W') continue; else return 0; case 'X': if (str[slen-i-1]=='X') continue; else return 0; case 'Y': if (str[slen-i-1]=='Y') continue; else return 0; case 'Z': if (str[slen-i-1]=='5') continue; else return 0; case '1': if (str[slen-i-1]=='1') continue; else return 0; case '2': if (str[slen-i-1]=='S') continue; else return 0; case '3': if (str[slen-i-1]=='E') continue; else return 0; case '5': if (str[slen-i-1]=='Z') continue; else return 0; case '8': if (str[slen-i-1]=='8') continue; else return 0; } } return 1;}int main(){ char str[MAX_SIZE]; while (gets(str)!=NULL) { int pa,mi; pa=pal(str); mi=mir(str); if (pa==0&&mi==0) printf("%s -- is not a palindrome.\n",str); else if (pa==1&&mi==0) printf("%s -- is a regular palindrome.\n",str); else if (pa==0&&mi==1) printf("%s -- is a mirrored string.\n",str); else if (pa&&mi) printf("%s -- is a mirrored palindrome.\n",str); printf("\n"); } return 0;}
AC之后感觉这题这么写实在太狠了,然后又看了一下网上代码,看到
首先可以用两个数组把题目中的表格存起来
char *ch = "AEHIJLMOSTUVWXYZ12358";
char *re = "A3HILJMO2TUVWXY51SEZ8";
这才受到启发,把原来代码进行了改进,但这样要注意判断镜像串的时候要讨论字符串长度是否为1,否则会WA
修改后AC的代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_SIZE 10005int pal(char str[MAX_SIZE]){ int i,j,slen; slen=strlen(str); for (i=0,j=slen-1;i<slen/2;i++,j--) if (str[i]!=str[j]) break; if (i==slen/2) return 1; return 0;}int mir (char str[MAX_SIZE]){ char *ch="AEHIJLMOSTUVWXYZ12358"; char *re="A3HILJMO2TUVWXY51SEZ8"; int i,j,slen; slen=strlen(str); if (slen==1) { for (j=0;j<strlen(ch);j++) if (str[0]==ch[j]&&str[0]==re[j]) return 1; return 0; } else { for (i=0;i<slen/2;i++) { for (j=0;j<strlen(ch);j++) if (str[i]==ch[j]&&str[slen-i-1]==re[j]) { j=-1; break; } if (j!=-1) return 0; } return 1; }}int main(){ char str[MAX_SIZE]; while (gets(str)!=NULL) { int pa,mi; pa=pal(str); mi=mir(str); if (pa==0&&mi==0) printf("%s -- is not a palindrome.\n",str); else if (pa==1&&mi==0) printf("%s -- is a regular palindrome.\n",str); else if (pa==0&&mi==1) printf("%s -- is a mirrored string.\n",str); else if (pa&&mi) printf("%s -- is a mirrored palindrome.\n",str); printf("\n"); } return 0;}
0 0
- UVa 401 - Palindromes -AC
- UVa 401 Palindromes
- UVa OJ 401-Palindromes
- UVa:401 - Palindromes
- uva 401 Palindromes //字符串
- uva 401 - Palindromes
- UVa 401 - Palindromes
- UVa 401 - Palindromes
- UVa 401 - Palindromes
- uva-401 - Palindromes
- UVa 401 Palindromes
- uva 401 Palindromes
- uva 401 Palindromes
- UVA 401 - Palindromes
- UVa 401 - Palindromes
- UVA 题目401 - Palindromes
- UVA 401 Palindromes
- UVa 401: Palindromes
- java.lang.NoClassDefFoundError: org/apache/commons/lang/xwork/StringUtils .
- 怎样在自己的Blog中展现3D标签云效果
- 配置THinkPHP版本3.1.3完整版出现错误:Fatal error: Cannot redeclare t()。
- 你可以看低我,但是你不能否认我在做的努力
- 怎样和孩子一起游戏?
- UVa 401 - Palindromes -AC
- P1040 高精度乘法
- java程序实现“搜索文件目录下特定类型的文件"
- android使用tcpdump抓包
- 学生成绩管理系统--servlet+jsp
- arcgisviewer for flex 实现as 和 mxml传递变量
- Windows 配置收集 - Some Configuration In Windows - By黑月君(待续)
- 实验报告
- 初识迭代器 C++ Iterator