PHP各种算法题
a.假设我们第一天在吃饭的时候,掉了一粒米,没有在意,第二天掉了两粒,第三天掉了6粒,此后的每天都会掉落从第一天开始数的天数*前一天掉落的米粒数,问:我们在第10天会掉落多少粒米?
/*阶乘实现*/
function jiecheng($mi)
{
$arr[1] = 1; //定义第一天掉了一粒米
for($i=2;$i<=$mi;$i++)
{
$arr[$i] = $i*$arr[$i-1];
}
$sum = $arr[$mi-1];
return "我们在第10天的时候会掉".$sum."粒米";
}
echo jiecheng(10);
/*递归实现*/
function digui($num)
{
if($num<0)
{
return "shuru ";
}
else if($num==0||$num==1)
{
return 1;
}
else
{
return self::digui($num-1)*$num."粒米";
}
}
echo digui(10);
b.猴子选大王 : m只猴子围坐成一个圈,按顺时针方向从1到m编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到n的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。
function arr($m){
for($i=1;$i<=$m;$i++){
$arr[$i] ='第'.$i.'只';
}
return $arr;
}
function hz($m,$n){
$arr = arr($m);
$j=1;
while(count($arr)>1)
{
if($j%$n != 0)
{
array_push($arr,$arr[$j]);
}
unset($arr[$j]);
$j++;
}
return $arr;
}
print_r(hz(5,4));
c.羊生羊 : 有一母羊,到5岁可生育,每年一头,第一年公羊、第二年母羊,依次循环。到15岁绝育,不再能生,20岁死亡,问n年后有多少头羊?
function sheep($year)
{
static $num = 1; //第一年 定义 一只羊
for($i=1;$i<=$year;$i++)
{
if($i>4&&$i<15)
{
$num++;
if($i%2==1)
{
self::sheep($year-$i);
}
}
if($i==20)
{
$num--;
}
}
return $num;
}
d.斐波那契数列—–递归 (一)
function recursion($num)
{
if($num<1)
{
return -1;
}
if($num==1||$num==2)
{
return 1;
}
return recursion($num-1)+recursion($num-2);
}
for($i=1;$i<=20;$i++) //循环显示
{
$recursion .= recursion($i).",";
}
$recursion = substr($recursion,0,-1);
echo $recursion;
d.斐波那契数列—–迭代(二)
function iteration($num)
{
if($num<1)
{
return -1;
}
$a[0] = 1;
$a[1] = 1;
for($i=2;$i<=$num;$i++)
{
$a[$i] = $a[$i-1]+$a[$i-2];
}
return $a;
}
$iteration = implode(",",iteration(0)); //拼接成数组
echo $iteration;
d.斐波那契数列—–数组(三)
function arrays($num)
{
$arr = array();
for($i=1;$i<=$num;$i++)
{
if($i==1||$i==2)
{
$arr[$i] = 1;
}
else
{
$arr[$i] = $arr[$i-1]+$arr[$i-2];
}
}
return $arr;
}
print_r(arrays(10));
d.斐波那契数列~~~杨辉三角(四)
<table border="1">
<?php
$num = 14;
$arr = array();
for($i=1;$i<=$num;$i++)
{
echo "<tr>";
for($j=1;$j<=$i;$j++)
{
if($j==0||$i==$j)
{
$arr[$i][$j] = 1;
}
else
{
$arr[$i][$j] = $arr[$i-1][$j]+$arr[$i-1][$j-1];
}
echo "<td>";
echo $arr[$i][$j];
echo "</td>";
}
echo "</tr>";
}
?>
</table>
e.无限极循环—–递归(一)
function digui($list,$id) //递归显示
{
$arr = array();
foreach($list as $key=>$val)
{
if($id==$val['id'])
{
$arr[] = $val;
$arr = array_merge($arr,digui($list,$val['pid']));
}
}
return $arr;
}
print_r(digui($list,26));
e.无限极循环—–迭代(二)
function diedai($list,$id) //迭代实现
{
$arr = array();
while($id>0)
{
foreach($list as $key=>$val)
{
if($val['id']==$id)
{
$arr[] = $val;
$id = $val['pid'];
break;
}
}
}
return $arr;
}
print_r(diedai($list,26));
e.无限极循环~~~家族树(三)
function family($list,$pid=0,$level=1)
{
$arr = array();
foreach($list as $key=>$val)
{
if($val['pid']==$pid)
{
$val['level'] = $level;
$val['html'] = str_repeat("**",$level);
$arr[] = $val;
$arr = array_merge($arr,family($list,$val['id'],$level+1));
}
}
return $arr;
}
$con = family($list,0,1);
f.给美女发红包:今天我给一个妹子发了一毛钱红包,然后她给我发两毛,然后我三毛,她四毛…….到我给她发99.9的时候,她不发了!那么问题来了,我一共亏了多少?
function redpacket($money){
$man = -0.1;
$woman = 0;
$sum = 0;
$sums = 0;
while($man<=$money-0.1){
$man += 0.2;
$woman += 0.2;
$sum = $sum+round($man,2);
$sums = $sums+round($woman,2);
}
$num = $sum-($sums-100);
return $num;
}
echo "我一共欠了".redpacket(99.9)."元";
g.笛卡尔乘积 (一般为goods sku)
Array
(
[0] => Array
(
[0] => M Array
[1] => L (
) [0] => M-38-男款-黑色
[1] => Array [1] => M-38-女款-黑色
( [2] => M-39-男款-黑色
[0] => 38 ---> [3] => M-39-女款-黑色
[1] => 39 [4] => L-38-男款-黑色
) [5] => L-38-女款-黑色
[2] => Array [6] => L-39-男款-黑色
( [7] => L-39-女款-黑色
[0] => 男款 )
[1] => 女款
)
[3] => Array
(
[0] => 黑色
)
)
function CartesianProduct($sets){
$result = array();
// 循环遍历集合数据
for($i=0,$count=count($sets); $i<$count-1; $i++){
// 初始化
if($i==0){
$result = $sets[$i];
}
$tmp = array();
// 结果与下一个集合计算笛卡尔积
foreach($result as $res){
foreach($sets[$i+1] as $set){
$tmp[] = $res."-".$set;
}
}
// 将笛卡尔积写入结果
$result = $tmp;
}
return $result;
}
print_r(CartesianProduct($arr));die;
> h.递归 (算法是,如果当前分类税率是0,则找它的上级,直到找到税率大于0的,返回,如果都没设置,就返回0)
public function getcategory_taxrate($cat_id){
if(empty($cat_id)){
return ["code" => 1, "msg" => "未获取到分类id"];
}
$category_info = $this->categoty_obj->get_category_one($cat_id);//此处为查询单条 框架实现方式不一样
$tax = $category_info['tax'];
if($category_info['parent_id'] == 0){
return array("code" => 0,"msg" => $tax);
}else{
if($category_info['tax'] <= 0){
return self::getcategory_taxrate($category_info['parent_id']);
}else{
return ["code" => 0,"msg" => $tax];
}
}
}