zoukankan      html  css  js  c++  java
  • UVa 401

    1.题目大意

    输入字符串,判断其是否为回文串或镜像串。其中,输入的字符串中不含0,且全为合法字符。以下为所有的合法字符及其镜像:

    2.思路

    (1)考虑使用常量数组而不是if或switch来实现对镜像的判断,由此避免过于繁琐的过程。

    (2)" -- is not a palindrome."," -- is a mirrored string."," -- is a regular palindrome."," -- is a mirrored palindrome."这四个输出的判断,实际上是两个部分:是否镜像串,是否回文串。

     输出 是否回文(p) 是否镜像(m) p*2+m
     -- is not a palindrome. 否 0 否 0 0
     -- is a mirrored string. 否 0 是 1 1
     -- is a regular palindrome. 是 1 否 0 2
     -- is a mirrored palindrome. 是 1 否 1 3

    利用上述的方法,将输出存入一个二维字符数组,则可以利用数组便捷地找到字符串对应的输出。

    (3)由于大写字母与数字在ASCII字符集上的位置有间隔,因此要分别判断。

    3.应当注意的问题

    (1)写完以后发现一直WA,然后检查了很久,发现原来是因为少了个换行符。原题中的Sample Output,行与行之间是还有一个换行的。因此,以后写题要注意格式的问题,避免由于格式问题产生的WA。

    (2)在检查的过程中,最后尝试提交时,可以把用于检查的中间输出的代码注释掉。事实上,未必检查一遍就能完成任务,有时往往需要检查很多遍,这样就避免了麻烦。

    4.代码

    #include"stdio.h"
    #include"string.h"
    #include"ctype.h"
    
    const char* rev="A   3  HIL JM O   2TUVWXY51SE Z  8 ";  //定义镜像串有关的常量数组
    const char* output[]= {" -- is not a palindrome."," -- is a mirrored string."," -- is a regular palindrome."," -- is a mirrored palindrome."}; //输出有关的常量数组
    
    char jud(char x)
    {
        if(isalpha(x)) //判断是否为字母,如果是字母的情况下
            return rev[x-'A'];
        else           //如果是数字的情况下
            return rev[x-'0'+25];
    }
    
    int main()
    {
        int i,p,m,l;
        char s[20];      //由题目给出的范围可知
        while(scanf("%s",s)==1)   //这里注意不要用"&s"
        {
            l=strlen(s); 
            p=1;
            m=1;
            for(i=0; i<(l+1)/2; i++)
            {
                if(s[i]!=s[l-i-1]) p=0;    //判断是否回文
                if(s[i]!=jud(s[l-i-1])) m=0;  //判断是否镜像
            }
            printf("%s%s
    
    ",s,output[p*2+m]);  
        }
        return 0;
    }
    

      

    参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著

  • 相关阅读:
    JMeter使用正则表达式提取相应信息
    Python的configparser生成配置文件,以及相关操作
    Python函数主要的作用
    Python函数传参位置关系总结
    Python中的作用域
    Python高阶函数解析
    Python中set集合的增加,update和add的区别
    Oracle 11g服务详细介绍及哪些服务是必须开启的?
    javacc jjtree 写法 以及 jj写法 基本语法 以及应用
    Python 3.3 try catch所有的错误Error,不包括Exception。关键在于 sys.exc_info()
  • 原文地址:https://www.cnblogs.com/rgvb178/p/5944760.html
Copyright © 2011-2022 走看看