回文词 (Palindromes,Uva401)

例题 3-3  回文词 (Palindromes,Uva401)

输入一个字符中,判断它是否为回文串以及镜像串。输入字符串保证不含数字0。所谓回文串,就是反转以后和原串相同,如abba和madam。所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE。注意,并不是每个字符在镜像之后都能得到一个合法字符。在本题中,每个字符的镜像如图3-3所示(空白项表示该字符镜像后不能得到一个合法字符)。

输入的每行包含一个字符串(保证只有上述字符。不含空白字符),判断它是否为回文串和镜像串(共4种组合)。每组数据之后输出一个空行。

样例输入:

NOTAPALINDROME
ISAPALINILAPASI
2A3MEAS
ATOYOTA

样例输出:

NOTAPALINDROME -- is not a palindrome.
ISAPALINILAPASI -- is a regular palindrome.

2A3MEAS -- is a mirrored string.

ATOYOTA -- is a mirrored palindrome.

【分析】

既然不包含空白字符,可以安全地使用scanf进行输入。回文串和镜像串的判断都不复杂,并且可以一起完成,详见下面的代码。使用常量数组,只用少量代码即可解决这个看上去有些复杂的题目。

#include<stdio.h>
#include<string.h>
#include<ctype.h>
const char* rev ="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
const char* msg[]={"not a palindrome","a regular palindrome","a mirrored string","a mirrored palindrome"};
char r(char ch)
{
    if(isalpha(ch)) return rev[ch-‘A‘];
    return rev[ch-‘0‘+25];
}
int main()
{
    char s[30];
    while(scanf("%s",s)==1)
    {
        int len=strlen(s);
        int p=1,m=1;
        for(int i=0;i<(len+1)/2;i++)
        {
            if(s[i]!=s[len-1-i]) p=0;//不是回文串
            if(r(s[i])!=s[len-1-i]) m=0;//不是镜像串
        }
        printf("%s -- is %s.\n\n",s,msg[m*2+p]);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/bencky/p/10358093.html

时间: 2024-10-10 15:23:01

回文词 (Palindromes,Uva401)的相关文章

UVa401 回文词

Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDEDCBA" is a palindrome because it is the same when the string is read from left to right as when the string is

UVA 401 Palindromes(回文词)

 回文词 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 401 Appoint description:  acmparand  (2013-07-07)Luke  (2014-01-20) System Crawler  (2015-05-10) Description A regular palindrome is a string of

回文词

#include <iostream> #include <stdio.h> #include <iomanip> #include <string> using namespace std; const char *rev = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";//字符A-9的镜像字符,没有镜像则为空格 const char * msg[] = {"not a palindrome",&

Vijos1327回文词

回文词 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得到的 结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个回文词.你的任务是写 一个程序,求出将给定字符串变成回文词所需插入的最少字符数. 比如字符串"Ab3bd",在插入两个字符后可以变成一个回文词("dAb3bAd"或"Adb3bdA"). 然而,插入两个以下的字符无法使它变成一个回文词. 输入格式: 文件的第一行包含一个整数N,表示给定的字符串的

csuoj 1328: 近似回文词

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 355  Solved: 138 [Submit][Status][Web Board] Description 输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同

csu-1328 近似回文词 和 最长回文字符串

原博文地址:http://blog.csdn.net/u012773338/article/details/39857997 最长回文子串 描述:输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串连续出现的字符 串片段.回文的含义是:正着看和倒着看是相同的,如abba和abbebba.在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首 尾不要输出多余的字符串).输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组). 输入 :每行有一个

csu 1328: 近似回文词

1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 394  Solved: 144 [Submit][Status][Web Board] Description 输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把所有字母转化成小写之后得到的串,b(S)是a(S)的逆序串. 比如

字符串 - 近似回文词 --- csu 1328

近似回文词 Problem's Link:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 Mean: 略. analyse: 直接暴力枚举每一个终点,然后枚举回文串的半径即可. Time complexity:O(n*m) Source code: // Memory Time // 1347K 0MS // by : Snarl_jsb // 2014-10-03-14.25 #include<algorithm> #include

【Vijos 1327】回文词(DP)

题目描述 回文词是一种对称的字符串——也就是说,一个回文词,从左到右读和从右到左读得到的结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个回文词.你的任务是写一个程序,求出将给定字符串变成回文词所需插入的最少字符数.   比如字符串“Ab3bd”,在插入两个字符后可以变成一个回文词(“dAb3bAd”或“Adb3bdA”).然而,插入两个以下的字符无法使它变成一个回文词. 输入 第一行包含一个整数N,表示给定字符串的长度,3<=N<=5000   第二行是一个长度为N的字符串,