您的位置:首页 > 其它

京东2016笔实习生在线笔试题

2016-04-08 21:29 288 查看

1.三子棋题

大致题目的意思如下:

在3* 3方格中

同行或同列或对角线有三个相同的,则胜出

输出结果只能为

1.x胜出

2.o胜出

3.平局

4.下一步该x

5.下一步该o

6.给的棋局有问题

输入:

x 0 x

. x .

0 . x

输出

x胜出

个人思路:初始化棋牌之后,由输入判断x、0各选手已经下棋的步数以及剩余可以下棋的步数,判断两个选手下棋步数差值是否合理,如果不合理则棋牌非法,然后判断是否由选手胜出,如果由选手胜出,则棋牌结束,否则判断下一步该哪个选手下棋。

php代码实现效果如下:

<?php
function fn($input){
$box=array();
$xUser=0;
$oUser=0;
$blank=0;

for ($i=0,$j=0; $i <9; $i++) {
$tm=$i % 3;
if(0== $tm && $i!=0){
++$j;
}
$box[$j][$tm]=$input[$i];
if($input[$i]=='x'){
$xUser++;
}else if($input[$i]=='0'){
$oUser++;
}else{
$blank++;
}
}
//判断是否有胜出
$isLegal=(abs($xUser-$oUser)>1);
if($isLegal){
echo '棋局不合法';
}else{
$result=checkResult($box);
if($result == false){
if($blank==0){
echo '平局';
}else if($xUser !=$oUser){
$next=($xUser > $oUser)? '0':'x';
echo '下一步该'.$next;
}else{
echo '棋局不合法';
}
}else{
echo $result;
}
}
}
function checkResult($box){
//检查行
for ($i=0; $i <3 ; $i++) {
if($box[$i][0] == $box[$i][1] && $box[$i][0]==$box[$i][2] && $box[$i][0] !='.'){
return $box[$i][0].':胜出';
}
}
//检查列
for ($i=0; $i <3 ; $i++) {
if($box[0][$i] == $box[1][$i] && $box[0][$i]==$box[2][$i] && $box[0][$i] !='.'){
return $box[0][$i]. ':胜出';
}
}
//检查正对角线
if($box[0][0] == $box[1][1] && $box[1][1]==$box[2][2] && $box[1][1] !='.'){
return $box[1][1]. ':胜出';
}
//检查斜对角线
if($box[0][2] == $box[1][1] && $box[1][1]==$box[2][0] && $box[1][1] !='.'){
return $box[1][1]. ':胜出';
}
return false;
}

//输出棋牌
function showBox($input){
echo '<table cellspacing =0 cellpadding=0 border=1><tr>';
for ($i=0; $i <9 ; $i++) {
echo '<td width="30px" align="center">'.$input[$i].'</td>';
if(($i+1) %3 ==0 && $i !=0){
echo '</tr><tr>';
}
}
echo '</tr></table>';
}

//测试1
$input=array('x','0','x','0','0','.','x','0','0');
showBox($input);
fn($input);
//测试2
$input=array('x','x','x','0','0','.','x','0','0');
showBox($input);
fn($input);


2.证劵委托题

题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。

n、s、B、S

其中n代表委托信息,s要求的最有价值的委托信息的个数,B代表买入、S代表卖出

输出:

6 2

B 50 2

S 50 1

S 20 2

S 30 1

B 40 4

B 50 6

输出:

B 50 8

B 40 4

S 50 1

S 30 2

(备注:6代表委托信息的个数、2代表表示买入和卖出委托信息各返回2个 ,其中每行如“B 50 2",第一个字段B代表买入,S代表卖出,50代表价格,最后一个字段代表数量)

个人的思路:就是需要将类型(买入和卖出)相同的合并一下,然后依据价格的大小进行排序,最后取出最大的s个委托信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: