练习

题目

假设某人有100000现金。每经过一次路口需要进行一次交费。 交费规则:

  • 现金大于50000:每次交5%
  • 现金小于等于50000:每次交5000

请写程序计算此人可以经过多少次路口。


原代码错误分析

<?php
$money = 100000;
for($times = 0;$money>=5000;$times++)
{
    if($money>50000)
    {
        $money = $money * (1-0.5); // 错误:题目是扣5%,写成扣50%!应该是1-0.05
    }
    else
    {
        $money -= 5000;
    }
}
echo "<br/>可以过多少次:";
echo $times;
echo "<br/>剩下多少钱:";
echo $money;
?>
Code language: HTML, XML (xml)

报错原因:$money * (1-0.5) 是乘以0.5,而题目要求扣5%,应该乘以 0.95。 这个笔误不会造成死循环,只是计算结果错误;如果出现 Maximum execution time of 30 seconds exceeded,就是死循环(循环条件永远成立,变量不会减少到退出条件)。


完整PHP代码

<?php
// 解决中文乱码
echo '<meta http-equiv="Content-Type" content="text/html;charset=utf-8">';

$money = 100000;
$times = 0;

// 只要钱还够交下一次路费,就继续走路口
while ($money > 0)
{
    if ($money > 50000) {
        $money = $money * 0.95; // 扣除5%,剩余95%
    } else {
        $money = $money - 5000; // 扣固定5000
    }
    $times++;
}

echo "<br/>可以过多少次: {$times}";
echo "<br/>剩下多少钱: {$money}";
?>
Code language: HTML, XML (xml)

也可以用for版本:

<?php
echo '<meta http-equiv="Content-Type" content="text/html;charset=utf-8">';
$money = 100000;
for($times=0; $money>0; $times++){
    if($money>50000){
        $money *= 0.95;
    }else{
        $money -= 5000;
    }
}
echo "次数:{$times},余额:{$money}";
?>
Code language: HTML, XML (xml)

乱码说明

在PHP页面顶部输出meta标签,告诉浏览器使用utf-8解析页面,解决中文乱码:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
Code language: HTML, XML (xml)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注