ZOJ 1325,HDOJ 1318--Palindromes
Posted on 2011-08-24 13:20 acpeng 閱讀(200) 評論(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;
}

主要技巧:設置兩個全局的字符串常量,分別表示A~Z的reverse字符和1~9的reverse字符,不存在reverse的可以用任一個invalid characters代替,本代碼用@代替,寫兩個函數分別進行palindrome string和mirrored string的判斷。














































