PHP经典算法(七)
2019-12-18 09:33:20 来源:admin 点击:795
【程序8】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x> y则将x与y的值进行交换,然后再用x与z进行比较,如果x> z则将x与z的值进行交换,这样能使x最小。
这里不把排序当做考察点,排序的话可以使用冒泡,快速,插入等排序算法,这里使用了三种交换变量的方式,我感觉这才是重要的
public function actionSortX()
{
$x = 6;
$y = 53;
$z = 6;
if($x>$y) // $y<$x
{
$x = $x+$y;
$y = $x-$y;
$x = $x-$y;
}
if($x>$z)
{
$tmp = $x;
$x = $z;
$z = $tmp;
}
if($y>$z)
{
$tmp = $y . '-' .$z;
$tmp = explode('-',$tmp);
$y = $tmp[1];
$z = $tmp[0];
}
echo $x,',',$y,',',$z;
}
【程序9】 题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
public function actionMultiplicationTable()
{
for ($i=1;$i<=9;$i++)
{
for ($j=1;$j<=$i;$j++)
{
echo $j . '*' .$i .'=' . $i*$j;
echo ' ';
}
echo "<br>";
}
}
【程序10】 题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
1.程序分析:请抓住分子与分母的变化规律。
public function actionAddFraction()
{
$sum = 0;
$numerator = [2,3];
$denominator = [1,2];
// 根据规律获得所有的分子和分母
for ($i=2;$i<20;$i++)
{
$numerator[$i] = $numerator[$i-2] + $numerator[$i-1];
$denominator[$i] = $denominator[$i-2] + $denominator[$i-1];
}
// 获得分数的前n项和
for ($i=0;$i<20;$i++)
{
$sum += $numerator[$i] / $denominator[$i];
}
var_dump($sum);
}
【程序11】 题目:求1+2!+3!+...+20!的和
1.程序分析:此程序只是把累加变成了累乘。
public function actionAddFactorial()
{
$n = 20;
$sum = 0;
for ($i=1;$i<=$n;$i++)
{
$num = 1;
for ($j=1;$j<=$i;$j++)
{
$num = $j*$num;
}
$sum += $num;
}
var_dump($sum);
}