USACO 1.2.3 Name That Number
程序员文章站
2022-06-10 18:45:51
...
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'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; }