某城市出租车计费问题

本文介绍了某城市出租车计费规则,包括不同时间段的起步价和超出部分的计费方式,并提供了两种解题思路,分别针对不同时段进行计算和合并相同起步价时段的方法。内容涉及流程控制和函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

  • 每日 06:00 - 21:00,起步价6元,当日 22:00 - 次日 05:00,起步价7元。
  • 起步价包含2公里,超出部分按照每公里 1.5 元收费。
  • 每次乘车加收 1 元 的燃油附加税

输出打车的时间和距离,计算本次打车的费用。


一、解题思路:

1)方法一:
  • 将时间段分为三个:

    • 00:00 - 05:00, 起步价7元
    • 06:00 - 21:00, 起步价6元
    • 22:00 - 24:00,起步价7元
  • 定义三个变量

    • 时间 $time
    • 距离 $distance
    • 费用 $const
  • 每个时间段的费用

    • 00:00 - 05:00 起步价7元

      ① 距离 <= 2,费用 = 起步价7元 + 燃油附加税1元;

      $const = 8; // 7+1
      

      ② 距离 > 2, 费用 = 起步价7元 + (距离 - 2) * 1.5元/km + 燃油附加税1元

      $const = 7 + ($distance -2) * 1.5 + 1;
      
    • 06:00 - 21:00 起步价6元

      ① 距离 <= 2,费用 = 起步价6元 + 燃油附加税1元;

      $const = 7; // 6+1
      

      ② 距离 > 2,费用 = 起步价6元 + (距离 - 2)* 1.5元/km + 燃油附加费1 元;

      $const = 6 + ($distance - 2) * 1.5 + 1;
      
    • 22:00 - 24:00 起步价7元

      ① 距离 <= 2,费用 = 起步价7元 + 燃油附加税1元;

      $const = 8; // 7+1
      

      ② 距离 > 2, 费用 = 起步价7元 + (距离 - 2) * 1.5元/km + 燃油附加税1元;

      $const = 7 + ($distance - 2) * 1.5 + 1;
      

2)方法二:
  • 将时间段分为三个:

    • 00:00 - 05:00, 起步价7元
    • 06:00 - 21:00, 起步价6元
    • 22:00 - 24:00, 起步价7元
  • 定义三个变量

    • 时间 $time
    • 距离 $distance
    • 费用 $const
  • 每个时间段的费用(可以把 00:00- 5:00 和 22:00 - 24:00 合到一起计算,因为起步价相同)

    • 00:00- 5:00 和 22:00 - 24:00 起步价7元

      ① 距离 <= 2,费用 = 起步价7元 + 燃油附加税1元;

      $const = 8; // 7+1
      

      ② 距离 > 2, 费用 = 起步价7元 + (距离 - 2) * 1.5元/km + 燃油附加税1元

      $const = 7 + ($distance -2) * 1.5 + 1;
      
    • 06:00 - 21:00 起步价6元

      ① 距离 <= 2,费用 = 起步价6元 + 燃油附加税1元;

      $const = 7; // 6+1
      

      ② 距离 > 2, 费用 = 起步价6元 + (距离 - 2) * 1.5元/km + 燃油附加税1元

      $const = 7 + ($distance -2) * 1.5 + 1;
      

二、代码实现

1)方法一:
$time = 3; // 时间
$distance = 8; // 距离
$const = 0; // 费用

function countPrice($time, $distance) {
    if ($time >= 0 && $time <= 5) {
        if ($distance > 2) {
            $const = 7 + ($distance - 2) * 1.5 + 1;
        } else {
            $const = 8; // 7+1
        }
    } else if ($time >= 6 && $time <= 21) {
        if ($distance > 2) {
            $const = 6 + ($distance - 2) * 1.5 + 1;
        } else {
            $const = 7; // 6+1
        }
    } else if ($time >= 22 && $time <= 24) {
        if ($distance > 2) {
            $const = 7 + ($distance - 2) * 1.5 + 1;
        } else {
            $const = 8; // 7+1
        }
    } else {
        // 当时间不在以上时间段内时
        return "请输入合法时间";
    }
    
    return $const;
}

$res = countPrice($time, $distance); // 调用函数
echo "时间为".$time."距离为".$distance."的费用为:".$res."元";
2)方法二:
$time = 3; // 时间
$distance = 8; // 距离
$const = 0; // 费用

function countPrice($time, $distance) {
    if ( ($time >= 0 && $time <= 5) || ($time >= 22 && $time <= 24) ) {
        if ($distance > 2) {
            $const = 7 + ($distance - 2) * 1.5 + 1;
        } else {
            $const = 8; // 7+1
        }
    } else if ($time >= 6 && $time <= 21) {
        if ($distance > 2) {
            $const = 6 + ($distance - 2) * 1.5 + 1;
        } else {
            $const = 7; // 6+1
        }
    } else {
        // 当时间不在以上时间段内时
        return "请输入合法时间";
    }
    
    return $const;
}

$res = countPrice($time, $distance); // 调用函数
echo "时间为".$time."距离为".$distance."的费用为:".$res."元";

三、运行结果

1)时间在 00:00- 5:00 和 22:00 - 24:00 时;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2)时间在 06:00- 21:00 时;

在这里插入图片描述

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值