USACO--namenum

####Name That Number####
簡述:
首先呢,分類有一串數字編碼,每個數字代表一些字母,按照數字對應的字母可以生成一些名字,然後在給定的合法名字的文件裏找,看是不是合法,把合法的名字輸出來。

我覺得吧,一個個生成再比對,太麻煩了,直接把合法的名字翻譯成編碼比對不是更方便?於是:

代碼:

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

char in[15];
char name[15];

int check();
char tran(int i);
int main(void)
{
    freopen("namenum.in", "r", stdin);
    freopen("namenum.out", "w", stdout);
    int flag = 0;
    scanf("%s", in);
    FILE *fp;
    fp = fopen("dict.txt", "r");
    while(!feof(fp))
    {
        fscanf(fp, "%s", name);
        if(check())
        {
            printf("%s\n", name);
            flag = 1;
        }
    }
    if(!flag)printf("NONE\n");
    return 0;
}
int check()
{
    char tmp[15];
    memset(tmp, 0, sizeof(tmp));
    int i, len;
    len = strlen(name);
    if(len != strlen(in))
        return 0;
    for(i = 0; i < len; i++)
        tmp[i] = tran(i);
    if(strcmp(tmp, in) == 0)
        return 1;
    else
        return 0;
}
char tran(int i)
{
    if(name[i] >= 'A' && name[i] <= 'C')return '2';
    if(name[i] >= 'D' && name[i] <= 'F')return '3';
    if(name[i] >= 'G' && name[i] <= 'I')return '4';
    if(name[i] >= 'J' && name[i] <= 'L')return '5';
    if(name[i] >= 'M' && name[i] <= 'O')return '6';
    if(name[i] == 'P' || name[i] == 'R' || name[i] == 'S')return '7';
    if(name[i] >= 'T' && name[i] <= 'V')return '8';
    if(name[i] >= 'W' && name[i] <= 'Y')return '9';
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章