usaco 1.2.3 name thatnumber
题意:有好多头奶牛,它们每一头都有一个编号,每个数字分别对应三个字母,每个数字从它对应的字母中挑一个出来组成一个单词,给定一个词典,看如果这个单词在词典中是存在的,就输出,如果存在多个这样的单词,按照字母表的顺序输出。
打印出所有可能的单词然后去比较,觉得效率有问题。出题者的用意明显是让我们反过来做,将词典里的单词转换成数字然后和给定的数字比较,因为给的词典里的单词都是按照字母表顺序排列的,而且数字和字母之间存在明显关系。
细节+代码:
/* id: 15257142 lang: c task: namenum */ #include#includeint 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;}
