题解:
改题目要记录下镜像的字母,然后判断是否相同(即使镜像转换后,字符串反转是否与原串相同),理解好题意就好
注意点:不是每个答案之间空一横,而是每输出一个就要输出一行,不然会PE
#include <cstdio> #include <iostream> #include <string> #include <cstring> #include <algorithm> using namespace std; char has[] = "AEHIJLMOSTUVWXYZ12358"; char cha[] = "A3HILJMO2TUVWXY51SEZ8"; bool prime(string str) { int r = str.size()-1; int l = 0; while(l < r) { if(str[l] != str[r]) return false; l++; r--; } return true; } bool mirror(string str) { int lon = strlen(has); string tmp = str; int len = tmp.size(); for(int i = 0; i < len; i++) { int pos = find(has,has+lon,str[i]) - has; if(pos == lon) return false; //没有镜像的字符 else tmp[i] = cha[pos]; } for(int i = 0; i < len; i++) { if(str[i] != tmp[len-i-1]) return false; } return true; } int main() { //freopen("in.txt","r",stdin); string str; int fir = 0; while(getline(cin,str)) { bool pri, mir; pri = prime(str); mir = mirror(str); cout << str; if(!pri && !mir) printf(" -- is not a palindrome.\n"); if(pri && !mir) printf(" -- is a regular palindrome.\n"); if(!pri && mir) printf(" -- is a mirrored string.\n"); if(pri && mir) printf(" -- is a mirrored palindrome.\n"); fir = 1; printf("\n"); } return 0; }