大致题目的意思如下:
在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);
题目的详细信息已经记不住,只能大致描述一下,就是求最有价值的的委托信息。
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个委托信息