您的位置:首页 > 其它

UVa:401 - Palindromes

2014-04-19 09:33 267 查看
这是回归以后发表的第一道UVa的题目,略感吃力,望再接再厉!(貌似以前做过了)

此题要判断输入的字符串的性质,性质一:该串既不是回文串也不是镜像串(即将该串反转过来,并将每个字符用相应的反转字符后,仍和原串一样),性质二:该串是回文串但不是镜像串,性质三:该串是镜像串但不是回文串,性质四:该串既是回文串又是镜像串。

思路清晰简单,但刚开是我一直在思考数字'0'和字母‘O’的问题(其实此问题可以忽略,被题目中的这句话“Note that O (zero) and 0 (the letter) are considered the same character and thereforeONLY the letter "0" is a valid character.” 给误导了),从而忽略了字符‘B’这样的字符也是有反转字符的,它们的反转字符是空格或者也可以是其他的无效字符。WA了好多次的说~~~

正确代码如下:

#include<string.h>
#include<stdio.h>
const int MAXS=1000000;
char s[MAXS];
char ch[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
char re[]="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
int main()
{
    while(scanf("%s",s)!=EOF){
        int p=1,m=1;
        int leng=strlen(s);
        for(int i=0;i<leng/2;++i)
            if(s[i]!=s[leng-i-1]){ p=0; break;}
        for(int i=0;i<leng;++i){
            char r;
            if(s[leng-i-1]>=65&&s[leng-i-1]<=90)
                r=re[s[leng-i-1]-'A'];
            else
                r=re[s[leng-i-1]-'0'+25];
            if(s[i]!=r){ m=0; break;}
        }
        if(!p&&!m)
            printf("%s -- is not a palindrome.\n\n",s);
        if(p&&!m)
            printf("%s -- is a regular palindrome.\n\n",s);
        if(!p&&m)
            printf("%s -- is a mirrored string.\n\n",s);
        if(p&&m)
            printf("%s -- is a mirrored palindrome.\n\n",s);
    }
    return 0;
}


--------------------------------------------------------------------------------------------

Keep It Simple,Stupid!

--------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: