前几天在做HDU2059龟兔赛跑问题
没弄出来, 然后干了点别的, 今天写了个水题没细心错了好些次
不应该。
#include <iostream> //UVa必须加上 #include <cstdio> #include <cstring> using namespace std; char rev[22] = { 'A', '3', 'H', 'I', 'L', 'J', 'M', 'O', '2', 'T', 'U', 'V', 'W', 'X', 'Y', '5', '1', 'S', 'E', 'Z', '8' }; char old[22] = { 'A', 'E', 'H', 'I', 'J', 'L', 'M', 'O', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '5', '8' }; int Reverse (char ch) { int i; for (i = 0; i < 21; i++) if (ch == rev[i]) return i + 1; return 0; } int isReverseEqual (char ch1, char ch2) { int pos = Reverse(ch2); if (ch1 == old[pos-1]) return 1; return 0; } int main() { int i, n, palindrome, mirrored; char str[2000], temp[2000]; while (scanf("%s", str) != EOF) { n = strlen(str); palindrome = mirrored = 1; //判断是否回文字符串 for (i = 0; i <= n / 2; i++) if (str[i] != str[n-i-1]) { //少判断了0和O的区别 if (str[i] == '0' && str[n-i-1] == 'O' || str[i] == 'O' && str[n-i-1] == '0') continue; palindrome = 0; break; } //判断是否镜像字符串; for (i = 0; i <= n / 2; i++) if (!(Reverse(str[i]) && Reverse(str[n-i-1]) && isReverseEqual(str[i], str[n-i-1]))) { if (str[i] == '0' && str[n-i-1] == 'O' || str[i] == 'O' && str[n-i-1] == '0') continue; mirrored = 0; break; } if (palindrome && mirrored) printf("%s -- is a mirrored palindrome.\n\n", str); else if (palindrome) printf("%s -- is a regular palindrome.\n\n", str); else if (mirrored) printf("%s -- is a mirrored string.\n\n", str); else printf("%s -- is not a palindrome.\n\n", str); } return 0; }