先描述问题:公司创立只有一位员工,每名员工经3月后转正,成为正式员工后可每月推荐一名新员工,新员工经三月后,转正又可推荐新员工;假设公司第一位员工也需要试用期,并且所有员工均不离职,请算出第n月员工数量。
分析:经过归纳分析:得出以下数据1,1,1,2,3,4,6,9,13,,,,,
实现代码如下:
<?php ???/* ???*转正问题 ???*1,1,1,2,3,4,6,9,13,,,,, ???*/ ???function rabit($month){
//前三个月员工数为1人 ???????if($month<=3){ ???????????$nums = 1; ???????????return $nums; ???????}else{ ???????????$f1 = 1; ???????????$f2 = 1; ???????????$f3 = 1; //判断月数在第几次循环中(向下取结果值),当月数是3的倍数时,为第倍数减一次循环 ???????????if($month%3 == 0){ ???????????????$m = $month/3 -1; ???????????}else{ ???????????????$m = floor($month/3); ???????????}
//循环次数 ???????????for($i=1;$i<=$m;$i++){
//第一次循环的三个值 ???????????????$f ?= $f1 + $f3; ???????????????$f5 = $f2 + $f; ???????????????$f6 = $f3 + $f5;
?//当循环数等于条件值时,跳出循环 ???????????????if($i == $m){
//当月数为3的整数倍时是最大值 ???????????????????if($month%3 == 0){ ???????????????????????return $f6;
//当月数取余3为1时是最小值 ???????????????????}else if($month%3 == 1){ ???????????????????????return $f;
//当月数取余3为2时是中间值 ???????????????????}else if($month%3 == 2){ ???????????????????????return $f5; ???????????????????}
//循环次数小于条件值时,进行循环赋值,层层推进 ???????????????}else{ ???????????????????$f1 = $f; ???????????????????$f2 = $f5; ???????????????????$f3 = $f6; ???????????????} ???????????} ???????} ???}
//测试 ???$month1 = 1; ???$result1 = rabit($month1); ???echo $result1."<br>"; ???$month2 = 12; ???$result2 = rabit($month2); ???echo $result2;?>
7.员工转正问题的实现-PHP
原文地址:http://www.cnblogs.com/52-hz/p/7550996.html