UVa:401 - Palindromes

这是回归以后发表的第一道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!

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值