比较简单的题目,WA了一次是没看清英文题目的要求。
/* uvaoj: 401 PROB: Palindromes */ #include<stdio.h> #include<string.h> #define LOCAL char st[25]; char reverse1[100] = "AEHIJLMOSTUVWXYZ12358"; char reverse2[100] = "A3HILJMO2TUVWXY51SEZ8"; int r; int is_regular( char st[] ); int is_mirrored( char st[] ); int main() { r = strlen(reverse1); #ifdef LOCAL freopen("Palindromes.in.txt", "r", stdin); freopen("Palindromes.out.txt", "w", stdout); #endif // LOCAL while( gets(st) != NULL ) { int m, n; int len = strlen(st); m = is_regular(st); n = is_mirrored(st); if(m) { if(n) printf("%s -- is a mirrored palindrome.\n", st); else printf("%s -- is a regular palindrome.\n", st); } else { if(n) printf("%s -- is a mirrored string.\n", st); else printf("%s -- is not a palindrome.\n", st); } printf("\n"); } return 0; } int is_regular( char st[] ) { int i, j, len, yes=1; char s[30]; strcpy(s,st); len = strlen(s); for( i=0; i<len/2; i++ ) if( s[i] != s[len-1-i] ) { yes = 0; break; } return yes; } int is_mirrored( char st[] ) { int yes = 1; char s1[30], s2[30]; strcpy(s1,st); strcpy(s2,st); int i, len, n; len = strlen(s1); for( i=0; i<len; i++ ) { int found = 0; for(n=0; n<r; n++) { if(s1[i] == reverse1[n]) { s1[i] = reverse2[n]; found = 1; break; } } if(!found) return 0; } strcat(s2,s1); if( is_regular(s2) ) return 1; else return 0; }