HDU1318 POJ1590 UVA401 ZOJ1325 Palindromes【回文+入门练习】
问题链接: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\n\n", s, msg[gettype(s)]);
return 0;
}
浙公网安备 33010602011771号