2015华为招聘机试样题(java实现)
2014-09-08 10:54
417 查看
1.
参考答案:
importjava.util.*;
importjava.util.Map.Entry;
publicclassMain{
staticMap<String,Integer>candidateList=newTreeMap<String,Integer>();//因为TreeMap是有序的,在投票数相同的情况下,先添加的候选人依然排在前面
staticintinvalid=0;
publicstaticvoidmain(String[]args){
Scannerscan=newScanner(System.in);
Stringstr=scan.nextLine();
String[]s=str.split("");
while(s[0].equals("addCandidate")){
candidateList.put(s[1],0);
str=scan.nextLine();
s=str.split("");
}
while(s[0].equals("vote")){
if(candidateList.containsKey(s[1])){
candidateList.put(s[1],candidateList.get(s[1])+1);
}else{
invalid=invalid+1;
}
str=scan.nextLine();
s=str.split("");
}
if(s[0].equals("getVoteResult")){
ArrayList<Map.Entry<String,Integer>>entries=getVoteResult();
for(inti=0;i<entries.size();i++){
Stringkey=entries.get(i).getKey();
intvalue=entries.get(i).getValue();
System.out.println(key+""+value);
}
System.out.println(invalid);
}
scan.close();
}
privatestaticArrayList<Entry<String,Integer>>getVoteResult(){
List<Map.Entry<String,Integer>>entries=newArrayList<Map.Entry<String,Integer>>(candidateList.entrySet());
Collections.sort(entries,newComparator<Map.Entry<String,Integer>>(){
publicintcompare(Map.Entry<String,Integer>obj1,Map.Entry<String,Integer>obj2){
returnobj2.getValue()-obj1.getValue();
}
});
return(ArrayList<Entry<String,Integer>>)entries;
}
}
2.
参考答案:
importjava.util.Scanner;
publicclassMain{
publicstaticvoidmain(String[]args){
Scannerscan=newScanner(System.in);
Stringstr=scan.next();
char[]strArray=str.toCharArray();
int[]flag=newint[strArray.length];
StringBuffernum=newStringBuffer("");
intmaxnum=0;
for(inti=0;i<strArray.length-1;i++){
if(strArray[i]<strArray[i+1]){
flag[i]=1;
}
}
for(inti=0;i<strArray.length;i++){
if(flag[i]==0){
num.append(strArray[i]);
if(Integer.parseInt(num.toString())>maxnum){
maxnum=Integer.parseInt(num.toString());
}
num.setLength(0);
}
else{
num.append(strArray[i]);
}
}
System.out.println(maxnum);
scan.close();
}
}
3.
参考答案:
importjava.util.*;
publicclassMain{
privatestaticintn,m;
privatestaticboolean[][]flagArr;
privatestaticchar[][]array;
privatestaticbooleanisFound;
publicstaticvoidmain(Stringargs[]){
Scannercin=newScanner(System.in);
Stringword;
n=cin.nextInt();
m=cin.nextInt();
array=newchar
[m];
word=cin.next();
isFound=false;
for(inti=0;i<n;i++){
array[i]=cin.next().toCharArray();
}
flagArr=newboolean
[m];
for(inti=0;i<n;i++){
Arrays.fill(flagArr[i],false);
}
findWord(word);
if(isFound){
System.out.println("YES");
}else{
System.out.println("NO");
}
cin.close();
}
privatestaticvoidfindWord(Stringword){
for(inti=0;i<n;i++)
for(intj=0;j<m;j++){
if(array[i][j]==word.charAt(0)){
flagArr[i][j]=true;
findNext(word,1,i,j);
if(isFound)
return;
else
flagArr[i][j]=false;
}
}
}
privatestaticvoidfindNext(Stringword,intindex,intx,inty){
if(index==word.length()){
isFound=true;
return;
}elseif(index<word.length()){
intnextIndex=index+1;
//up
if((x-1)>=0&&(!flagArr[x-1][y])
&&array[x-1][y]==word.charAt(index)){
flagArr[x-1][y]=true;
findNext(word,nextIndex,x-1,y);
}
//right
if((y+1)<m&&(!flagArr[x][y+1])
&&array[x][y+1]==word.charAt(index)){
flagArr[x][y+1]=true;
findNext(word,nextIndex,x,y+1);
}
//down
if((x+1)<n&&(!flagArr[x+1][y])
&&array[x+1][y]==word.charAt(index)){
flagArr[x+1][y]=true;
findNext(word,nextIndex,x+1,y);
}
//left
if((y-1)>0&&(!flagArr[x][y-1])
&&array[x][y-1]==word.charAt(index)){
flagArr[x][y-1]=true;
findNext(word,nextIndex,x,y-1);
}
flagArr[x][y]=false;
}
}
}
描述: | 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用“A”、”B”、”C”、”D”表示,选举时开始计票,若输入的不是“A”、”B”、”C”、”D”则视为无效票。选举结束后获取各个候选人的得票数以及无效票的个数,输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。同时getVoteResult命令为结束命令。 |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 输入为多行形式输入,每一行为一条命令。输入的命令只会是有效命令不会有非法命令,但可能存在非法的投票,上面已经描述了。 添加候选人的命令如下:addCandidate为命令xx1为候选人 addCandidatexx1 投票的命令如下:vote为命令xx1为候选人的字符串 votexx1 统计投票的命令如下:getVoteResult为命令 getVoteResult |
输出: | 输出结果以添加候选人的顺序进行顺序输出,最后一行为无效的数量。 |
样例输入: | addCandidatexx1 addCandidatexx2 addCandidatexx3 addCandidatexx4 addCandidatexx5 addCandidatexx6 votexx1 votexx3 votexx4 votexx1 votexx2 votexx7 votexx4 votexx5 votexx3 votexx2 votexx1 votexx7 getVoteResult |
样例输出: | xx13 xx22 xx32 xx42 xx51 xx60 2 |
2.
描述: | 输入一串数字,找到其中包含的最大递增数。递增数是指相邻的位数从小到大排列的数字。如2895345323,递增数有289,345,23,那么最大递增数为345. |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况 |
输出: | 输出最大递增数。 |
样例输入: | 123526897215 |
样例输出: | 2689 |
3.
描述: | WordMaze是一个网络小游戏,你需要找到以字母标注的食物,但要求以给定单词字母的顺序吃掉。如上图,假设给定单词if,你必须先吃掉i然后才能吃掉f。 但现在你的任务可没有这么简单,你现在处于一个迷宫Maze(n×m的矩阵)当中,里面到处都是以字母标注的食物,但你只能吃掉能连成给定单词W的食物。 如下图,指定W为“SOLO”,则在地图中红色标注了单词“SOLO”。 注意区分英文字母大小写,你只能上下左右行走。 |
运行时间限制: | 无限制 |
内存限制: | 无限制 |
输入: | 输入第一行包含两个整数n、m(0<n,m<21)分别表示n行m列的矩阵,第二行是长度不超过100的单词W,从第3行到底n+3行是只包含大小写英文字母的长度为m的字符串。 |
输出: | 如果能在地图中连成给定的单词,则输出“YES”,否则输出“NO”。注意:每个字母只能用一次。 |
样例输入: | 55 SOLO CPUCY EKLQH CRSOL EKLQO PGRBC |
样例输出: | YES |
答案提示: |
publicclassMain{
privatestaticintn,m;
privatestaticboolean[][]flagArr;
privatestaticchar[][]array;
privatestaticbooleanisFound;
publicstaticvoidmain(Stringargs[]){
Scannercin=newScanner(System.in);
Stringword;
n=cin.nextInt();
m=cin.nextInt();
array=newchar
[m];
word=cin.next();
isFound=false;
for(inti=0;i<n;i++){
array[i]=cin.next().toCharArray();
}
flagArr=newboolean
[m];
for(inti=0;i<n;i++){
Arrays.fill(flagArr[i],false);
}
findWord(word);
if(isFound){
System.out.println("YES");
}else{
System.out.println("NO");
}
cin.close();
}
privatestaticvoidfindWord(Stringword){
for(inti=0;i<n;i++)
for(intj=0;j<m;j++){
if(array[i][j]==word.charAt(0)){
flagArr[i][j]=true;
findNext(word,1,i,j);
if(isFound)
return;
else
flagArr[i][j]=false;
}
}
}
privatestaticvoidfindNext(Stringword,intindex,intx,inty){
if(index==word.length()){
isFound=true;
return;
}elseif(index<word.length()){
intnextIndex=index+1;
//up
if((x-1)>=0&&(!flagArr[x-1][y])
&&array[x-1][y]==word.charAt(index)){
flagArr[x-1][y]=true;
findNext(word,nextIndex,x-1,y);
}
//right
if((y+1)<m&&(!flagArr[x][y+1])
&&array[x][y+1]==word.charAt(index)){
flagArr[x][y+1]=true;
findNext(word,nextIndex,x,y+1);
}
//down
if((x+1)<n&&(!flagArr[x+1][y])
&&array[x+1][y]==word.charAt(index)){
flagArr[x+1][y]=true;
findNext(word,nextIndex,x+1,y);
}
//left
if((y-1)>0&&(!flagArr[x][y-1])
&&array[x][y-1]==word.charAt(index)){
flagArr[x][y-1]=true;
findNext(word,nextIndex,x,y-1);
}
flagArr[x][y]=false;
}
}
}
相关文章推荐
- 华为2014机试样题1: 计票统计 java实现
- 华为机试三道题(Java实现)
- 华为机试练习---java实现电话号码本
- 华为招聘机试整理10:实现字符串中子字符串的替换
- 华为校园招聘上机试题 Java实现(一)
- 华为招聘机试整理10:实现字符串中子字符串的替换
- 2013华为校园招聘java实现(大家水个回复啊)
- 华为机试(字符串最后一个单词长度,计算字符串的个数,明明的随机数) Java实现
- 2017年,华为机试题目 《字符串按指定重新分配》 --Java实现
- 2015华为校园招聘 机试总结
- 华为机试准备--练习(JAVA实现)
- 华为机试准备--练习题(JAVA实现)
- 华为机试(取近似值,合并表,提取不重复整数,字符个数统计)Java实现
- 华为校园招聘上机试题Java实现(一)
- 2015华为校园招聘机试模拟题及解答
- 2015华为实习生招聘机试和面试记录(2015年3月28南研所)
- 华为招聘机试整理11:实现字符串间隔输出
- 华为机考2015(2)JAVA实现
- 华为校园招聘java机试整理
- 2015华为实习生招聘机试模拟考1之求一个int型证书的两种递减数之和