1 #include<stdio.h>
2 #include<string.h>
3 #include<ctype.h>
4 const char* words[] = {"is not a palindrome.","is a regular palindrome.","is a mirrored string.","is a mirrored palindorem."};
5 const char* ans = {"A 3 HIL JM O 2TUVWXY51SE Z 8 "};
6 int main()
7 {
8 char A[1000];
9 memset(A,0,sizeof(A));
10 while( scanf("%s",A) == 1){
11 int p=1,q=1;
12 int flag;
13 int len = strlen(A);
14 for(int i=0;i<=len/2;i++){
15 if(A[i] != A[len-1-i]) p =0; //palindrome
16 if(isalpha(A[i])){ //mirrored string
17 flag = A[i] - 'A';
18 if(ans[flag] != A[len-1-i]) q=0;
19 }
20 else{
21 flag = A[i] - '1' +26;
22 if(ans[flag] != A[len-1-i]) q=0;
23 }
24 }
25 printf("%s\n",words[2*q+p]);
26 }
27 return 0;
28 }
详细题目可看《算法竞赛入门经典》p48
本题目有三个技巧。一是将所要转换的的序列整理成数组的形式。
二是将输出的文本也整理成数组,通过计算来输出,很巧妙。
三是将两个判断合二为一,使代码更加简洁。