此页面通过工具从 csdn 导出,格式可能有问题。
题目: http://acm.hdu.edu.cn/showproblem.php?pid=1318
一般的字符串处理问题,一个共性:思路简单,代码繁琐。
譬如此题,首先会有一个问题要考虑:如何去建立 镜像字母表 。这里我采用的是两个常量字符串作为一一对应。
至于回文判断应该就不用说了吧。
代码如下:
#include <cstdio>
#include <cstring>
const char ch1[]="AEHIJLMOSTUVWXYZ123580";
const char ch2[]="A3HILJMO2TUVWXY51SEZ80";
char s[22];
int mir[130];
int pal(char *s){
int n=strlen(s)-1;
for (int i(0);i<=n/2;i++)
if (s[i]!=s[n-i]) return 0;
return 1;
}
int mirr(char* s){
int n=strlen(s)-1;
for (int i(0);i<=n/2;i++)
if (mir[s[i]]<0 || mir[s[i]]!=s[n-i]) return 0;
return 1;
}
int main(){
freopen("in.txt","r",stdin);
for (int i('A');i<='Z';i++) mir[i]=-1;
for (int i(0);i<22;i++) mir[ch1[i]]=ch2[i];
while (scanf("%s",s)!=EOF){
int a=pal(s),b=mirr(s);
if (!(a+b)) printf("%s -- is not a palindrome.\n",s);
else {
if (a>b) printf("%s -- is a regular palindrome.\n",s);
else {
if (a<b) printf("%s -- is a mirrored string.\n",s);
else {
printf("%s -- is a mirrored palindrome.\n",s);
}
}
}
printf("\n");
}
return 0;
}
Accepted | 0MS | 220K | 876 B |