3-3 回文词(Palindromes P48) / HIT

来源:互联网 发布:苹果6数据流量怎么开 编辑:程序博客网 时间:2024/06/01 19:29

思路很简单,当时小心中间脑抽。。。

方法1:直接在for循环里边判断(不过当时写的时候犯了一个非常非常非常低级的错误。。。找了好久错)

#include <stdio.h>#include <stdlib.h>#include <math.h>#include <string.h>int main(){    char s[10005];    int i;    while(scanf("%s",s) == 1)    {        int f1 = 1,f2 = 1;//这个放错地方的错。。。找了1个多小时。。。真的是够了。。        for(i = 0;i < strlen(s);i++)        {            if(s[i] != s[strlen(s)-1-i])                f1 = 0;            char c;//一定小心啊啊啊啊啊!!!别把's'串给改了,改了后边没办法用            if(s[i] == 'E')                c = '3';            else if(s[i] == '3')                c = 'E';            else if(s[i] == 'J')                c = 'L';            else if(s[i] == 'L')                c = 'J';            else if(s[i] == 'S')                c = '2';            else if(s[i] == '2')                c = 'S';            else if(s[i] == 'Z')                c = '5';            else if(s[i] == '5')                c = 'Z';            else if(s[i] == 'A'||s[i] == 'H'||s[i] == 'I'||s[i] == 'M'||s[i] == 'O'||s[i] == 'T'||s[i] == 'U'||s[i] == 'V'||s[i] == 'W'||s[i] == 'X'||s[i] == 'Y'||s[i] == '1'||s[i] == '8')                c = s[i];            else                c = s[i]+1;            if(c != s[strlen(s)-1-i])                f2 = 0;        }        if(f2 && !f1)            printf("%s -- is a mirrored string.\n",s);        else if(!f2 && f1)            printf("%s -- is a regular palindrome.\n",s);        else if(f1 && f2)            printf("%s -- is a mirrored palindrome.\n",s);        else if(!f1 && !f2)            printf("%s -- is not a palindrome.\n",s);        printf("\n");    }    return 0;}
方法2:用字符的ASC码做数组下标。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){    int r[256][256]={0};    r['A']['A']=1;    r['E']['3']=1;    r['H']['H']=1;    r['I']['I']=1;    r['J']['L']=1;    r['L']['J']=1;    r['M']['M']=1;    r['O']['O']=1;    r['S']['2']=1;    r['T']['T']=1;    r['U']['U']=1;    r['V']['V']=1;    r['W']['W']=1;    r['X']['X']=1;    r['Y']['Y']=1;    r['Z']['5']=1;    r['1']['1']=1;    r['2']['S']=1;    r['3']['E']=1;    r['5']['Z']=1;    r['8']['8']=1;    char s[100005];    while(~scanf("%s",s))    {        int len=strlen(s);        int f1=1,f2=1;        for(int i=0;i<len;i++)        {            char a=s[i],b=s[len-1-i];            if(a!=b) f1=0;            if(!r[a][b]) f2=0;        }        if(!f1&&!f2) printf("%s -- is not a palindrome.\n",s);        if(f1&&!f2) printf("%s -- is a regular palindrome.\n",s);        if(!f1&&f2) printf("%s -- is a mirrored string.\n",s);        if(f1&&f2) printf("%s -- is a mirrored palindrome.\n",s);        printf("\n");    }}


原创粉丝点击