题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=342
题意:
给你个字符串叫你判断它是什么样子的字符串(回文镜像、镜像、回文、普通)。
思路:
把题目中的字母打表后直接做。
这题迷之RE,迷之WA。
好吧,RE是因为会有其他字符,但是我把数字和大写字母都特判了还是RE是要闹哪样,把手敲的判断大写字母改为isalpha函数就AC是个什么操作?
心血来潮把那些要打表的字母一个个拆开,怎么交怎么WA,变量放局部WA,放全局AC也很迷。
总之要注意的是用isalpha函数去判断大写字母,或者就我一个遇到这种问题吧。
#include <bits/stdc++.h>
using namespace std;
char mp[]="A 3 HIL JM O 2TUVWXY51SE Z 8 ";
char f(char c)
{
if(isalpha(c))
{
return mp[c-'A'];
}
else
{
return mp[26+c-'1'];
}
}
int i,num,num1,n;
char s[100000];
int main()
{
while(scanf("%s",s)!=EOF)
{
num=0;
num1=0;
n=strlen(s);
for(i=0;(n+1)/2>i;i++)
{
if(s[i]==f(s[n-i-1]))
{
num++;
}
if(s[i]==s[n-i-1])
{
num1++;
}
}
printf("%s -- ");
if(num1==(n+1)/2)
{
if(num==(n+1)/2)
{
printf("is a mirrored palindrome.\n");
}
else
{
printf("is a regular palindrome.\n");
}
}
else if(num==(n+1)/2)
{
printf("is a mirrored string.\n");
}
else
{
printf("is not a palindrome.\n");
}
printf("\n");
}
return 0;
}