####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';
}