您的位置:首页 > 编程语言 > Java开发

2015华为招聘机试样题(java实现)

2014-09-08 10:54 417 查看
1.

描述:模拟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

参考答案:

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.

描述:输入一串数字,找到其中包含的最大递增数。递增数是指相邻的位数从小到大排列的数字。如2895345323,递增数有289,345,23,那么最大递增数为345.

运行时间限制:无限制
内存限制:无限制
输入:输入一串数字,默认这串数字是正确的,即里面不含有字符/空格等情况
输出:输出最大递增数。
样例输入:
123526897215

样例输出:
2689

参考答案:

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.

描述:

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

答案提示:

参考答案:

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;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: