图2
如图一、图二所示
问题一:如黄线所示,如何判断一个数连续出现并且出现次数大于或等于3次.
问题二:如红线所示,如何判断一个数交叉递减或递增并且出现次数大于或等于3次.
5 个解决方案
#1
如果先保存到2维数组里,横坐标为x,纵坐标为y
那么连续出现3次的是 $arr[y][x] == $arr[y+1][x] == $arr[y+2][x]
递增: $arr[y][x]==$arr[y+1][x+1]-1==$arr[y+2][x+2]-2 $arr[y][x]==$arr[y+1][x-1]-1==$arr[y+2][x-2]-2
递增: $arr[y][x]==$arr[y+1][x+1]+1==$arr[y+2][x+2]+2 $arr[y][x]==$arr[y+1][x-1]+1==$arr[y+2][x-2]+2
SQL麻烦点原理相同。
#2
老大来了啊。。呵呵。。
能不能写的详细点啊。。
最好能写个function出来,
方便以后调用。。。
谢谢了啊
能不能写的详细点啊。。
最好能写个function出来,
方便以后调用。。。
谢谢了啊
#3
<?php
$data = array(
array("508",0,1,1,1,1,5,1,1,8,1),
array("416",1,1,2,2,4,1,6,2,1,2),
array("389",2,1,3,3,1,2,1,3,8,9),
array("645",3,2,4,1,4,5,6,4,1,1),
array("698",4,3,5,2,1,1,6,5,8,9),
array("567",5,4,6,3,2,5,6,7,1,1),
array("652",6,5,2,4,3,5,6,1,2,2),
array("658",7,6,1,5,4,5,6,2,8,3),
array("208",0,7,2,6,5,1,1,3,8,4));
function find_bingo($arry, $min_continual_times=3)
{
$rst = array();
for ($row = 0; $row < count($arry) - $min_continual_times; $row++)
{
for ($col=1; $col < count($arry[$row]); $col++)
{
$current = $arry[$row][$col];
settype($current,"string");
if (strpos($arry[$row][0], $current)!==false)
{
// 竖线
if ($row==0 || ($row>0 && $arry[$row][$col]!=$arry[$row-1][$col]
&& $arry[$row][$col]==$arry[$row+1][$col]
&& strpos($arry[$row+1][0],$arry[$row+1][$col]."")!==false
))
{
$count = 2; $row1 = $row + 1;
$str = $arry[$row][$col].$arry[$row1][$col];
while ($row1+1<count($arry)
&& $arry[$row1][$col]==$arry[$row1+1][$col]
&& strpos($arry[$row1+1][0], $arry[$row1+1][$col]."")!==false
)
{
$count++;
$row1++;
$str .= $arry[$row1][$col];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
// 左对角线
if (abs($arry[$row][$col]-$arry[$row-1][$col-1])!=1
&& abs($arry[$row][$col]-$arry[$row+1][$col+1])==1
&& strpos($arry[$row+1][0], $arry[$row+1][$col+1]."")!==false)
{
$count = 2; $row1 = $row + 1; $col1 = $col+1;
$str = $arry[$row][$col].$arry[$row1][$col1];
while ($arry[$row1][$col1]- $arry[$row1+1][$col1+1]==$arry[$row1-1][$col1-1]- $arry[$row1][$col1]
&& strpos($arry[$row1+1][0],$arry[$row1+1][$col1+1]."")!==false)
{
$count++; $row1++; $col1++;
$str .= $arry[$row1][$col1];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
// 右对角线
if (abs($arry[$row][$col]-$arry[$row-1][$col+1] )!=1
&& strpos($arry[$row+1][0],$arry[$row+1][$col-1]."")!==false
&& abs($arry[$row][$col]-$arry[$row+1][$col-1])==1)
{
$count = 2; $row1 = $row + 1; $col1 = $col-1;
$str = $arry[$row][$col].$arry[$row1][$col1];
while ($arry[$row1][$col1]- $arry[$row1+1][$col1-1]==$arry[$row1-1][$col1+1]- $arry[$row1][$col1]
&& strpos($arry[$row1+1][0], $arry[$row1+1][$col1-1]."")!==false)
{
$count++; $row1++; $col1--;
$str .= $arry[$row1][$col1];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
}
}
}
return $rst;
}
$bingos = find_bingo($data);
for ($i=0; $i<count($bingos); $i++)
{
echo "[".$bingos[$i][0].",".$bingos[$i][1]."] ".$bingos[$i][2]." (".$bingos[$i][3].")\n";
}
?>
输出: [坐标] 第一个数字 (数字列)
[1,6] 5 (543)
[4,6] 5 (567)
[4,7] 6 (66666)
[5,9] 8 (8765)
[6,6] 5 (555)
中了别忘请客.
#4
ls费了不少心思和精力啊。
楼主想写彩票分析程序?
楼主想写彩票分析程序?
#5
感谢runffer_yang的帮助,在此谢谢了!!!
#1
如果先保存到2维数组里,横坐标为x,纵坐标为y
那么连续出现3次的是 $arr[y][x] == $arr[y+1][x] == $arr[y+2][x]
递增: $arr[y][x]==$arr[y+1][x+1]-1==$arr[y+2][x+2]-2 $arr[y][x]==$arr[y+1][x-1]-1==$arr[y+2][x-2]-2
递增: $arr[y][x]==$arr[y+1][x+1]+1==$arr[y+2][x+2]+2 $arr[y][x]==$arr[y+1][x-1]+1==$arr[y+2][x-2]+2
SQL麻烦点原理相同。
#2
老大来了啊。。呵呵。。
能不能写的详细点啊。。
最好能写个function出来,
方便以后调用。。。
谢谢了啊
能不能写的详细点啊。。
最好能写个function出来,
方便以后调用。。。
谢谢了啊
#3
<?php
$data = array(
array("508",0,1,1,1,1,5,1,1,8,1),
array("416",1,1,2,2,4,1,6,2,1,2),
array("389",2,1,3,3,1,2,1,3,8,9),
array("645",3,2,4,1,4,5,6,4,1,1),
array("698",4,3,5,2,1,1,6,5,8,9),
array("567",5,4,6,3,2,5,6,7,1,1),
array("652",6,5,2,4,3,5,6,1,2,2),
array("658",7,6,1,5,4,5,6,2,8,3),
array("208",0,7,2,6,5,1,1,3,8,4));
function find_bingo($arry, $min_continual_times=3)
{
$rst = array();
for ($row = 0; $row < count($arry) - $min_continual_times; $row++)
{
for ($col=1; $col < count($arry[$row]); $col++)
{
$current = $arry[$row][$col];
settype($current,"string");
if (strpos($arry[$row][0], $current)!==false)
{
// 竖线
if ($row==0 || ($row>0 && $arry[$row][$col]!=$arry[$row-1][$col]
&& $arry[$row][$col]==$arry[$row+1][$col]
&& strpos($arry[$row+1][0],$arry[$row+1][$col]."")!==false
))
{
$count = 2; $row1 = $row + 1;
$str = $arry[$row][$col].$arry[$row1][$col];
while ($row1+1<count($arry)
&& $arry[$row1][$col]==$arry[$row1+1][$col]
&& strpos($arry[$row1+1][0], $arry[$row1+1][$col]."")!==false
)
{
$count++;
$row1++;
$str .= $arry[$row1][$col];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
// 左对角线
if (abs($arry[$row][$col]-$arry[$row-1][$col-1])!=1
&& abs($arry[$row][$col]-$arry[$row+1][$col+1])==1
&& strpos($arry[$row+1][0], $arry[$row+1][$col+1]."")!==false)
{
$count = 2; $row1 = $row + 1; $col1 = $col+1;
$str = $arry[$row][$col].$arry[$row1][$col1];
while ($arry[$row1][$col1]- $arry[$row1+1][$col1+1]==$arry[$row1-1][$col1-1]- $arry[$row1][$col1]
&& strpos($arry[$row1+1][0],$arry[$row1+1][$col1+1]."")!==false)
{
$count++; $row1++; $col1++;
$str .= $arry[$row1][$col1];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
// 右对角线
if (abs($arry[$row][$col]-$arry[$row-1][$col+1] )!=1
&& strpos($arry[$row+1][0],$arry[$row+1][$col-1]."")!==false
&& abs($arry[$row][$col]-$arry[$row+1][$col-1])==1)
{
$count = 2; $row1 = $row + 1; $col1 = $col-1;
$str = $arry[$row][$col].$arry[$row1][$col1];
while ($arry[$row1][$col1]- $arry[$row1+1][$col1-1]==$arry[$row1-1][$col1+1]- $arry[$row1][$col1]
&& strpos($arry[$row1+1][0], $arry[$row1+1][$col1-1]."")!==false)
{
$count++; $row1++; $col1--;
$str .= $arry[$row1][$col1];
}
if ($count >= $min_continual_times)
$rst[] = array($row+1, $col, $arry[$row][$col], $str);
}
}
}
}
return $rst;
}
$bingos = find_bingo($data);
for ($i=0; $i<count($bingos); $i++)
{
echo "[".$bingos[$i][0].",".$bingos[$i][1]."] ".$bingos[$i][2]." (".$bingos[$i][3].")\n";
}
?>
输出: [坐标] 第一个数字 (数字列)
[1,6] 5 (543)
[4,6] 5 (567)
[4,7] 6 (66666)
[5,9] 8 (8765)
[6,6] 5 (555)
中了别忘请客.
#4
ls费了不少心思和精力啊。
楼主想写彩票分析程序?
楼主想写彩票分析程序?
#5
感谢runffer_yang的帮助,在此谢谢了!!!