这题我用的方法就是将dict.txt中的每一个字符串读出来,并判断是否满足输入的那个数字,如果满足输出就是。
我还有另外一个算法,就是首先根据输入的数字来确定范围,然后逐步缩小,最后确定到个数,但是很快就发现这是(我)无法实现的高难度算法。
再一个,我上面的那个算法要注意的是数的长度,最长是12位的数字!int存不进,必须要用long long!
代码如下:
/
LANG: C
ID: yylogoo1
PROG: namenum
/
#include <stdio.h>
#include <assert.h>
FILE fp;
char str[13];
char map[26] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0};
{
long long t = 0;
while(str != ‘\0’){
t = 10;
t += map[*str – ‘A’];
str++;
}
return t;
}
LANG: C
ID: yylogoo1
PROG: namenum
/
#include <stdio.h>
#include <assert.h>
FILE fp;
char str[13];
char map[26] = {2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6,
7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0};
long long change(char
str){
long long t = 0;
while(str != ‘\0’){
t = 10;
t += map[*str – ‘A’];
str++;
}
return t;
}
int main(void)
{
int i;
long long n;
unsigned ans = 0;
freopen("namenum.in", "r", stdin);
freopen("namenum.out", "w", stdout);
fp = fopen("dict.txt", "r");
assert(fp != NULL);
scanf("%lld", &n);
while(fscanf(fp, "%s", str) == 1){
if(change(str) == n){
printf("%s\n", str);
ans++;
}
}
if(ans == 0){
printf("NONE\n");
}
return 0;
}