您的位置:首页 > 其它

字符串-401 - Palindromes

2016-07-11 14:21 197 查看


401 - Palindromes

题目大意:回文字符串和镜像字符串的定义不同,互相交叉,判断一个字符串是回文还是镜像的,或者二者都属于或者二者都不属于。

解题过程:提交了4次才AC,第一次是缺少判断,字符本身没有反转对应字符时,即使对应位置的字符的反转字符相同(都为"n",说明没有反转字符),也不属于镜像字符。

第二、三次是格式错误,第二次少了“--”,第三次少了空行。

正确代码如下:
# include <cstdio>
# include <cstring>
# include <iostream>
//# define LOCAL
using namespace std;
int main()
{
# ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
# endif
//	int i;
//0~8是数字1-9,9~34是字母A-Z
char reverse[35]={'1','S','E','n','Z','n','n','8','n',
'A','n','n','n','3','n','n','H','I','L','n','J','M','n',
'O','n','n','n','2','T',
'U','V','W','X','Y','5'};
//为0表示没有镜像字符
char a[100];
bool ispalind,ismirror;
while(scanf("%s",a)==1)
{
ispalind=ismirror=true;
int len=strlen(a);
/*
cout<<"字符串长: "<<len<<endl;
//*/
for(int i=0;i<=(len-1)/2;i++)//对称位置 i  (len-1)-i
{
/*
printf("%c",reverse[a[i]-'A'+9]);
//*/
if(a[i]!=a[len-1-i]) ispalind=false;
if(a[i]<='9'&&a[i]>='1'){
if(reverse[a[i]-'1']=='n'||reverse[a[i]-'1']!=a[len-1-i]) ismirror=false;
}
else {
if(reverse[a[i]-'A'+9]=='n'||reverse[a[i]-'A'+9]!=a[len-1-i]) ismirror=false;
}
}
/*
printf("\n");
//*/
if(ispalind)
{
if(ismirror) printf("%s -- is a mirrored palindrome.\n\n",a);
else printf("%s -- is a regular palindrome.\n\n",a);
}
else {
if(ismirror) printf("%s -- is a mirrored string.\n\n",a);
else printf("%s -- is not a palindrome.\n\n",a);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: