OpenJudge百炼-2804-词典-C语言-二分查找

来源:互联网 发布:php公开课 编辑:程序博客网 时间:2024/05/16 12:09
描述:
你旅游到了一个国外的城市。那里的人们说的外国语言你不能理解。不过幸运的是,你有一本词典可以帮助你。
输入:
首先输入一个词典,词典中包含不超过100000个词条,每个词条占据一行。每一个词条包括一个英文单词和一个外语单词,两个单词之间用一个空格隔开。而且在词典中不会有某个外语单词出现超过两次。词典之后是一个空行,然后给出一个由外语单词组成的文档,文档不超过100000行,而且每行只包括一个外语单词。输入中出现单词只包括小写字母,而且长度不会超过10。
输出:
在输出中,你需要把输入文档翻译成英文,每行输出一个英文单词。如果某个外语单词不在词典中,就把这个单词翻译成“eh”。
样例输入:
dog ogday
cat atcay
pig igpay
froot ootfray
loops oopslay

atcay
ittenkay
oopslay
样例输出:
cat
eh

loops

/**********************************************************文件名:百炼-2804**Copyright (c) 2015-2025 OrdinaryCrazy**创建人:OrdinaryCrazy**日期:20170915**描述:百炼2804参考答案**版本:1.0*********************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct word{    char fore[15],tran[15];}word;word dictionary[100000];char temp[50],des[15];int compare(const void*a,const void*b){    word* w1 = (word*)a;    word* w2 = (word*)b;    return strcmp(w1->fore,w2->fore);}int find(int from,int to)//查词函数,如果查到单词就返回单词所在条目数,查不到则返回-1{    if(to - from < 3)    {        int i;        for(i = from;i <= to;i++)            if(strcmp(des,dictionary[i].fore) == 0)                return i;        return -1;    }    int mid = (from + to) / 2;    if(strcmp(des,dictionary[mid].fore) == 0)        return mid;    if(strcmp(des,dictionary[mid].fore) > 0)        return find(mid,to);    return find(from,mid);}int main(){    int size = 0,res;    gets(temp);    while(temp[0] != '\0')    {        sscanf(temp,"%s%s",dictionary[size].tran,dictionary[size].fore);        size++;        gets(temp);    }    qsort(dictionary,size,sizeof(word),compare);    while(scanf("%s",des) != EOF)    {        res = find(0,size-1);        if(res >= 0) printf("%s\n",dictionary[res].tran);        else printf("eh\n");    }    return 0;}


原创粉丝点击