题目
假设某人有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)
Previous: do while循环和break还有continue的问题
Next: 留言本项目