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

", s, msg[gettype(s)]);

    return 0;
}


原文地址:https://www.cnblogs.com/tigerisland/p/7564538.html