这题是相当的纠结啊,WA了10+次。。。
AC代码:
1 #include<stdio.h> 2 #include<string.h> 3 4 char one[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789"; 5 char two[]="A 3 HIL JM O 2TUVWXY51SE Z 8 "; 6 7 int palin(char str[]) 8 { 9 int i, j; 10 j=strlen(str)-1; 11 for (i=0; i<=j; i++, j--) 12 { 13 if(str[i] != str[j]) 14 { 15 return 0; 16 } 17 } 18 return 1; 19 } 20 21 int pos(char ch) 22 { 23 int len=35, i; 24 for(i=0;i<len;i++) 25 if(one[i]==ch) 26 return i; 27 return len; 28 } 29 30 int mirror(char str[]) 31 { 32 int i, t, k=strlen(str)-1; 33 for (i=0; i<=k; i++, k--) 34 { 35 t=pos(str[i]); 36 if (str[k] != two[t]) 37 { 38 return 0; 39 } 40 } 41 return 1; 42 } 43 44 int main() 45 { 46 int n, m, i; 47 char str[1000]; 48 while(gets(str)) 49 { 50 /*for (i=0; i<strlen(str); i++) 51 { 52 if (str[i] == '0') 53 str[i]='O'; 54 }*/ 55 n=palin(str); 56 m=mirror(str); 57 if (!n && !m) 58 { 59 printf("%s -- is not a palindrome.\n\n", str); 60 continue; 61 } 62 if (n && !m) 63 { 64 printf("%s -- is a regular palindrome.\n\n", str); 65 continue; 66 } 67 if (!n && m) 68 { 69 printf("%s -- is a mirrored string.\n\n",str); 70 continue; 71 } 72 if (n && m) 73 { 74 printf("%s -- is a mirrored palindrome.\n\n", str); 75 continue; 76 } 77 } 78 return 0; 79 }