码迷,mamicode.com
首页 > 其他好文 > 详细

UVA_401:Palindromes

时间:2015-03-21 18:19:32      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

技术分享技术分享技术分享

 AC:Time(29ms)     C++ 4.8.2

#include<stdio.h>
#include<string.h>
char * mirstr = "AAE3EHHIIJLJMM0OS2STTUUVVWWXXYYZ5Z88";
int dispose(char *);
int main(void)
{
    char str[25];
    int state;
    while(scanf("%s", str) == 1)
    {
        state = dispose(str);
        switch(state)
        {
            case 1: printf("%s -- is not a palindrome.\n\n", str); break;
            case 2: printf("%s -- is a regular palindrome.\n\n", str); break;
            case 3: printf("%s -- is a mirrored string.\n\n", str); break;
            case 4: printf("%s -- is a mirrored palindrome.\n\n", str); break;
        }
    }

    return 0;
}

int dispose(char * str)
{
    int i;
    bool palin = true;
    bool mirr = true;
    int len = strlen(str);
    int half_len = len / 2;
    // 判断回文
    for(i = 0; i < half_len; i++)
        if(str[i] != str[len-1-i])
            palin = false;
    
    char * p;
    // 判断镜像
    for(i = 0; i < len; i++)
    {
        p = strchr(mirstr, str[i]);
        if(!p)
        {
            mirr = false;
            break;
        }
        
        if(p[0] == O || p[0] == 0) // 字母O和数字0单独处理
        {    // 一开始这个花括号忘记了,导致最后一个测试数据失败,情况四变成了情况二,通过调试检查出了错误。
            if(str[len-1-i] != O && str[len-1-i] != 0)
            {
                mirr = false;
                break;
            }
        }
        else if(p[1] != str[len-1-i])
        {
            mirr = false;
            break;
        }
    }    
    
    if(palin == false && mirr == false)
        return 1;
    else if(palin == true && mirr == false)
        return 2;
    else if(palin == false && mirr == true)
        return 3;
    else
        return 4;
    
}

 

UVA_401:Palindromes

标签:

原文地址:http://www.cnblogs.com/xpjiang/p/4355805.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!