UVa-401:回文,超出输出限制

时间:2014-04-09 13:11:53

标签: c

我正在尝试问题401 - Palindromes UVa在线评判,但我一直在失败......你可以找到问题here

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char reverse_t[36] = {' ','1','S','E',' ','Z',' ',' ','8',' ',
                     'A',' ',' ',' ','3',' ',' ',
                     'H','I','L',' ','J','M', ' ',
                     'O', ' ', ' ', ' ','2','T',
                     'U','V','W','X','Y','5'};

int is_mirror(char a,char b){
    if(a>='1' && a<='9'){
        if(reverse_t[a-'0'] == b) return 1;}
    else if(a>='A' && a<='Z')
        {if(reverse_t[a-'A'+10] == b) return 1;}
    return 0;
}

int main(int argc, char **argv) {
    char line[21];
    size_t len;
    int is_palinedromes, is_mirrored;
    while(scanf("%20s",line)){
        is_palinedromes = 1;
        is_mirrored = 1;
        int i;
        len = strlen(line);
        for(i = 0;i<len/2;i++){
            if(line[i] != line[len-1-i])
                is_palinedromes =0;
            if(!is_mirror(line[i],line[len-1-i]))
                is_mirrored = 0;
        }
        if((len%2==1)&&(is_mirrored))
            if(!is_mirror(line[len/2],line[len/2]))
                is_mirrored = 0;
        if(is_palinedromes && is_mirrored)
            printf("%s -- is a mirrored palindrome.\n",line);
        else if(is_mirrored &&(!is_palinedromes))
            printf("%s -- is a mirrored string.\n",line);
        else if((!is_mirrored)&&is_palinedromes)
            printf("%s -- is a regular palindrome.\n",line);
        else
            printf("%s -- is not a palindrome.\n",line);
        printf("\n");
    }

    return 0;
}

我将字母的镜像存储在数组 reverse_t 中,我可以通过函数 is_mirror 检查字母的镜像。

判决结果为“超出输出限制

我将不胜感激任何建议。谢谢。

1 个答案:

答案 0 :(得分:2)

似乎输入没有结束,所以我只需更改代码

while(scanf("%20s",line))

while(scanf("%20s",line)!=EOF)

然后我得到了AC:)。