描述
你刚从滑铁卢搬到一个大城市。这里的人说着一种难以理解的外语方言。幸运的是,你有一本字典来帮助你理解它们。
输入
北京大学英语笔译、输入由多达100,000个字典条目组成,后面跟着一个空行,后面跟着多达100,000个单词的消息。每个字典条目都是一行,包含一个英语单词,后跟一个空格和一个外语单词。任何外来词在字典中都只出现一次。这条信息是一串外语单词,每行一个单词。输入的每个单词都是一个不超过10个小写字母的序列。
输出
输出是将信息翻译成英文,每行一个单词。词典里没有的外来词应该翻译成“eh”。
样例输入
dog ogday cat atcay pig igpay froot ootfray loops oopslayatcay ittenkay oopslay
java百度翻译。样例输出
cat eh loops
提示
输入输出大,建议使用scanf和printf。
实现技巧:
Java翻译,(1)输入输出较多,推荐使用scanf()和printf()
(2)自定义cmp函数,对字符串使用sort排序
(3)灵活使用C和C++提供的输入函数(cin.get()、cin.peek()等)对输入进行处理
(4)由于词量较大,可以使用二分查找加快查找词条速度。用结构体存储两个字符串,
定义cmp使用自带的sort排序。应该注意的是发现空行(用cin.peek()),每次输入完一行词条,用cin.get()将换行处理掉。
解题代码:
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<algorithm>
using namespace std;
struct Entry{char english[11];char foreign[11];
}ent[100005];
int cmp(Entry entry1,Entry entry2){return strcmp(entry1.foreign,entry2.foreign)<0;
}
int main(){int num=0;//记录个数char word[11];while(true){scanf("%s %s",ent[num].english,ent[num].foreign);num++;cin.get();if(cin.peek() == '\n') break;} //回车后输入查找sort(ent,ent+num,cmp);while(scanf("%s",word)!=EOF){int left=0, right = num-1;int n=0;while(left<=right){int mid=left+(right-left)/2;n=strcmp(ent[mid].foreign,word);if(n<0) left = mid+1;else if(n>0) right = mid-1;else{printf("%s\n",ent[mid].english);break;}}if(n) printf("eh\n"); //n不等于0说明没有找到}return 0;
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
下面的StudentService.java实现了 通过JDBC对表STUDENTS的SELECT 和INSERT操作:
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态