作者:小嘿嘿 | 来源:互联网 | 2017-05-12 15:45
USACO1.2.3NameThatNumber题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺
USACO 1.2.3 Name ThatNumber 题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺
USACO 1.2.3 Name ThatNumber
题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺序输出。
打印出所有可能的单词然后去比较,觉得效率有问题。出题者的用意明显是让我们反过来做,将词典里的单词转换成数字然后和给定的数字比较,因为给的词典里的单词都是按照字母表顺序排列的,而且数字和字母之间存在明显关系。
细节+代码:
/*
ID: 15257142
LANG: C
TASK: namenum
*/
#include
#include
int main(){
freopen("namenum.in", "r", stdin); //在我看来输入输出是这道题目全部价值所在。
char num[20],a[30],b[20];
int m,ma,i,f,k;
scanf("%s",num);
m = strlen(num)-1;
freopen("dict.txt", "r", stdin); //!
freopen("namenum.out", "w", stdout); //!
f = 0;
while(scanf("%s",a)!=EOF){
ma = strlen(a)-1;
if(m!=ma)
continue;
for(i = 0;i<=ma;i++){
if(a[i]>'Q') //是没有'Q'的,那么……
k = (a[i]-'B')/3;
else
k = (a[i]-'A')/3;
b[i] = k+'2';
}
b[ma+1] = '\0';
if(strcmp(b,num)==0){
printf("%s\n",a);
f = 1;
}
}
if(f==0)
printf("NONE\n");
fclose(stdin);
fclose(stdout);
return 0;
}