posts - 21, comments - 2, trackbacks - 0, articles - 0

ZOJ 1325,HDOJ 1318--Palindromes

Posted on 2011-08-24 13:20 acpeng 阅读(189) 评论(0)  编辑 收藏 引用 所属分类: ACM程序
出自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;
}



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理