Name That Number

来源:互联网 发布:蛀牙漱口水 知乎 编辑:程序博客网 时间:2024/05/29 04:36

题意:类似9宫格手机键盘,数字对应的字母如下:

          2: A,B,C     5: J,K,L    8: T,U,V          3: D,E,F     6: M,N,O    9: W,X,Y          4: G,H,I     7: P,R,S
给定一个数字串如4734,在字典中查询出可以用这串数字代表的所有单词


解题思路

  1. 下面的算法没有技术含量,直接对读入的每个数字串进行分析,发现不符合随即处理下一个
  2. 因为字典是按字符串顺序排列好的,所以类似4734中的4代表的GHI字母,在处理A-F时可以简单跳过,而I-Z也可以直接不做处理

代码

/*ID: zc.rene1LANG: CPROG: namenum*/#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAX_LEN 13char alpha[8][4]={"ABC","DEF","GHI","JKL","MNO","PRS","TUV","WXY"};int before_area(char chr, char num){if(chr<alpha[num-'2'][0]) {return 1;}else{return 0;}}int after_area(char chr, char num){if(chr>alpha[num-'2'][2]) {return 1;}else{return 0;}}int main(void){int i, len, right, num_of_output=0;char str_num[MAX_LEN];char read_in[MAX_LEN];char result[MAX_LEN];FILE *fin=fopen("namenum.in", "r");FILE *dict=fopen("dict.txt", "r");FILE *fout=fopen("namenum.out", "w");fscanf(fin, "%s", str_num);while(fscanf(dict, "%s", read_in)>0){i=0;right=1;len=strlen(read_in);if(after_area( read_in[0], str_num[0])) break;if(len!=strlen(str_num)) continue;for(i=0; i<len; i++){if(before_area(read_in[i], str_num[i])||after_area( read_in[i], str_num[i])){right=0;break;}}if(right==1){num_of_output++;fprintf(fout, "%s\n", read_in);}}if(num_of_output==0){fprintf(fout, "NONE\n");}return 0;}



原创粉丝点击