zoukankan      html  css  js  c++  java
  • UVA401

    在这里插入图片描述
    在这里插入图片描述

    题目大意:

    多组输入,输入一个字符串,判断是不是回文串和镜像串,输出要求:

    • 如果该串既不是回文串也不是镜像串 则输出 is not a palindrome.
    • 如果该串是回文但不是镜像串 则输出 is a regular palindrome.
    • 如果该串不是回文但是是镜像串 则输出 is a mirrored string.
    • 如果两个条件都满足 则输出 is a mirrored palindrome.

    解题思路:

    这道题是紫皮书的入门题,首先我们要打一个镜像表和一个答案表,镜像表用来得到单个字符的镜像字符,答案表则用来判断最后的输出结果。
    PS:要注意的是,折半时一定要取到(s.length()+1)/2做一个向上取整,因为如果串长是奇数,中间的字符也要判断一下是不是自己的镜像( 因为这个点WA了3发:( ),再注意一下输出格式 要换两行,AC代码:

    #include <cstdio>
    #include <iostream>
    #include <string>
    using namespace std;
    const char* rev="A   3  HIL JM O   2TUVWXY51SE Z  8 ";//镜像表
    const char* ans[]={"is not a palindrome.","is a regular palindrome.","is a mirrored string.","is a mirrored palindrome."};//最后的答案
    char jx(char ch)//返回镜像字符
    {
    	if(isalpha(ch))//是字母返回字母镜像
    	  return rev[ch-'A'];
    	return rev[ch-'0'+25];  //非字母返回数字镜像
    }
    int main()
    {
    	string s;
    	while(cin>>s)
    	{
    		int flag=1,flag1=1;//flag用于判断回文 flag1判断镜像
    		for(int i=0;i<(s.length()+1)/2;i++)//一定不能写成s.length() 血淋淋的教训 WA三发
    		{
    			if(s[i]!=s[s.length()-i-1])
    			  flag=0;
    			if(jx(s[i])!=s[s.length()-i-1])
    			  flag1=0;
    			if(!flag&&!flag1)
    			  break;
    		}
    		cout<<s<<" -- "<<ans[flag1*2+flag]<<endl<<endl;//换两行
    	}
    	return 0;
    }
    
  • 相关阅读:
    JQuery validate.js 在ajax提交form时如何触发
    Ajax回调函数返回的中文字符串乱码问题
    对HTML5校验 自定义验证信息
    Mybatis + Mysql 插入数据时中文乱码问题
    javac 导入第三方jar包
    如何在VISIO 2010/2013 中关闭Shape protection(图形保护)
    关于 XMLHttpRequest对象的onreadyStateChange方法
    Centos7通过Docker安装Sentry(哨兵)
    Entity framework 预热
    Xamarin.Android Binding篇
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294266.html
Copyright © 2011-2022 走看看