学长说刷够紫书上的100道题目就可以进入ACM队
这是从紫书上的第一道题目
题目大意就是判断字符串是否是 镜像串、回文串、以及镜像回文串
镜像规则由题目给出
注意一点就是 对于有奇数个字符的字符串中间的字符也要判断,虽然判断不影响他是不是回文串 但是会影响他是否是镜像串 处理:(len+1)/2
#include<iostream>
#include<cstdio>
#include<cstring>
#define Maxn 32
using namespace std;
char s[Maxn];
const char rev[] = " A 3 HIL JM O 2TUVWXY51SE Z 8 ";
inline char Rev(char c) {
if(c>='A' && c<= 'Z') return rev[c-'A'+1];
else return rev[c-'0'+26];
}
int main() {
while( scanf("%s",s+1) == 1) {
int len = strlen(s + 1);
bool p1=1,p2=1;
//printf("%d\n",len);
for(int i=1;i<=(len+1)/2;i++) {
if(s[i] != s[len-i+1]) p1=0;
if(Rev(s[i]) != s[len-i+1]) p2=0;
}
/*printf("Tips:");
for(int i=1;i<=len;i++) printf("%c",Rev(s[i]));
printf("\n");*/
printf("%s -- is ",s+1);
if(p1==1&&p2==1) printf("a mirrored palindrome.\n\n");
if(p1==1&&p2==0) printf("a regular palindrome.\n\n");
if(p1==0&&p2==1) printf("a mirrored string.\n\n");
if(p1==0&&p2==0) printf("not a palindrome.\n\n");
}
return 0;
}