问题链接:HDU1318 POJ1590 UVA401 ZOJ1325 Palindromes。基础练习题,用C语言编写程序。
问题简述:参见上述链接。
问题分析:(略)
程序说明:
程序中,使用两个函数封装功能,使得程序更加简洁易懂。
判定回文时,使用两个数组下标相向移动,是一种常见的套路。
AC的C语言程序如下:
/* HDU1318 POJ1590 UVA401 ZOJ1325 Palindromes */ #include <stdio.h> #include <ctype.h> #include <string.h> #define MAXN 30 char miroralpha[] = "A 3 HIL JM O 2TUVWXY5"; char mirordigit[] = "1SE Z 8 "; char *msg[] = {" -- is not a palindrome." , " -- is a regular palindrome." , " -- is a mirrored string." , " -- is a mirrored palindrome."}; /* 字母镜像 */ char miror(char c) { if(isalpha(c)) return miroralpha[c - 'A']; else return mirordigit[c - '1']; } /* 计算字符串类型 */ int gettype(char s[]) { int start, end, p, m; p = 1; /* 回文标志 */ m = 1; /* 镜像标志 */ start = 0; end = strlen(s)-1; while(start <= end) { if(s[start] != s[end]) p = 0; if(miror(s[start]) != s[end]) m = 0; start++; end--; } return m * 2 + p; } int main(void) { char s[MAXN]; while(scanf("%s", s) != EOF) printf("%s%s ", s, msg[gettype(s)]); return 0; }