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个委托信息