UVA 401 Palindromes(刷紫書)

迴文
經典的字符串例題

出現的問題:一開始只考慮到了兩邊的字符的關係,到後來在網上找到測試用例,發現需要如果是奇數需要判斷最中間的符號是否爲鏡像;


#include<stdio.h>
#include<string.h>
int palindrome(char *c)
{
    int i;
    int flag = 1;
    for(i=0;i<strlen(c)/2;i++){
        if(c[i]!=c[strlen(c)-i-1]) {
            flag=0;
            break;
        }
    }
    return flag?1:0;
}
int mirrored(char a[],char *b,char *c)
{
    int i,j;
    int flag = 1;
    for(i=0;i<=strlen(c)/2;i++){
        for(j=0;a[j]&&a[j]!=c[i];j++);
        if(b[j]!=c[strlen(c)-i-1]) {
            flag=0;
            break;
        }
    }
    return flag?1:0;
}
int main()
{
    char a[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
    char b[]="A   3  HIL JM O   2TUVWXY51SE Z  8 ";
    char c[100];
    while(scanf("%s",c)==1){
        int m,n;
        m=mirrored(a,b,c);
        n=palindrome(c);
        if(m&&n) printf("%s -- is a mirrored palindrome.\n",c);
        else if(m&&!n) printf("%s -- is a mirrored string.\n",c);
        else if(n&&!m) printf("%s -- is a regular palindrome.\n",c);
        else if(!n&&!m) printf("%s -- is not a palindrome.\n",c);
        printf("\n");
    }
    return 0;
}

也就是說int mirrored(char a[],char *b,char *c)中的i<=strlen(c)/2的大於等於是必要的,我們需要判斷最中間的那個符號。

最後In addition, after each output line, you must print an empty line.


附上少許測試用例:

MAIAM
MAIAM -- is a mirrored palindrome.

A
A -- is a mirrored palindrome.

B
B -- is a regular palindrome.

AGA
AGA -- is a regular palindrome.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章