ZOJ 1325,HDOJ 1318--Palindromes

出自ZOJ_1325: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=325
主要技巧:设置两个全局的字符串常量,分别表示A~Z的reverse字符和1~9的reverse字符,不存在reverse的可以用任一个invalid characters代替,本代码用@代替,写两个函数分别进行palindrome string和mirrored string的判断。
#include < stdio.h >
#include
< string .h >
char  glo_str[ 27 ] = " A@@@3@@HIL@JM@O@@@2TUVWXY5 " ;
char  glo_num[ 10 ] = " 1SE@Z@@8@ " ;
int  Is_Palindrome( char   * str) // return 1:It is a Palindrome string,or else.
{
    
int i,j=(int)strlen(str)-1;
    
for(i=0;i<=j;i++,j--)
        
if(str[i]!=str[j])
            
return 0;
    
return 1;
}

int  Is_mirrored( char   * str) // return 1:It is a mirrored string,or else.
{
    
int i,j=(int)strlen(str)-1;
    
for(i=0;i<=j;i++,j--)
    
{
        
if(str[i]>='1'&&str[i]<='9')
        
{
            
if(glo_num[str[i]-'1']!=str[j])
                
return 0;
        }

        
else
        
{
            
if(glo_str[str[i]-'A']!=str[j])
                
return 0;
        }

    }

    
return 1;
}

int  main()
{
    
char str[30]="\0";int a,b;
    
while(scanf("%s",str)!=EOF)
    
{
        printf(
"%s -- ",str);
        a
=Is_Palindrome(str);
        b
=Is_mirrored(str);
        
if(a==0 && b==0)printf("is not a palindrome.\n");
        
else if(a==0 && b==1)printf("is a mirrored string.\n");
        
else if(a==1 && b==0)printf("is a regular palindrome.\n");
        
else printf("is a mirrored palindrome.\n");
        printf(
"\n");
    }

    
return 0;
}


你可能感兴趣的:(ZOJ 1325,HDOJ 1318--Palindromes)