作者 姚艳 单位 曲阜师范大学

日照万达广场停车收费规则是:当天第一次入场半小时内免费,超过半小时之后按照1.5元/半小时,3元/1时收费。
现在知道停车的开始和结束时刻,计算需要缴纳的停车费。

输入格式:

开始时间 - 结束时间(在一行 中间以短横线-分隔),时间按照 hh:mm 的格式

输出格式:

一行输出一个浮点数(保留小数点一位),表示停车费。

输入样例:

在这里给出一组输入。例如:

09:30-10:45

输出样例:

在这里给出相应的输出。例如:

3.0

一、Python 实现(停车费计算 🅿️)

def calculate_parking_fee(start_time, end_time):
    """
    计算停车费的函数
    参数:
    start_time - 停车开始时间(比如"09:30")
    end_time - 停车结束时间(比如"10:45")
    返回:停车费(保留一位小数)
    """
    # 第一步:拆分开始时间的小时和分钟(比如"09:30"拆成9和30)
    # split(':')把"hh:mm"按冒号分开,map(int,...)转成数字
    start_h, start_m = map(int, start_time.split(':'))
    # 第二步:拆分结束时间的小时和分钟
    end_h, end_m = map(int, end_time.split(':'))
    
    # 第三步:计算总停车分钟数(把小时都转成分钟,再相减)
    # 比如09:30 = 9×60 +30 = 570分钟;10:45=10×60+45=645分钟;645-570=75分钟
    start_total = start_h * 60 + start_m  # 开始时间的总分钟数
    end_total = end_h * 60 + end_m        # 结束时间的总分钟数
    duration = end_total - start_total    # 总停车时长(分钟)
    
    # 第四步:按收费规则算费用
    if duration <= 30:  # 半小时(30分钟)内免费
        return 0.0
    else:
        # 超过半小时的部分,先减去免费的30分钟
        extra_time = duration - 30
        # 向上取整计算有多少个"半小时"(重点!)
        # 比如extra_time=45分钟:45+29=74 →74//30=2个半小时(2×1.5=3元)
        # 比如extra_time=1分钟:1+29=30 →30//30=1个半小时(1×1.5=1.5元)
        # 加29是为了"不够半小时也算一个半小时"
        half_hours = (extra_time + 29) // 30
        # 费用=半小时个数 ×1.5元/半小时
        return half_hours * 1.5

# 主程序开始
# 读取输入的时间(比如"09:30-10:45"),去掉首尾多余空格
time_input = input().strip()
# 按短横线"-"拆分开始时间和结束时间
start_time, end_time = time_input.split('-')

# 计算停车费
fee = calculate_parking_fee(start_time, end_time)
# 输出结果,保留1位小数(比如3.0、1.5)
print("{0:.1f}".format(fee))
Python 代码超详细解释(7 岁小朋友能懂)
  1. 拆分时间start_time.split(':')09:30拆成['09','30'],再转成数字 9 和 30,就知道开始时间是 9 点 30 分;
  2. 计算总分钟数:1 小时 = 60 分钟,所以 9 点 30 分 = 9×60+30=570 分钟,10 点 45 分 = 10×60+45=645 分钟,停车总时长 = 645-570=75 分钟;
  3. 收费规则
    • 75 分钟 > 30 分钟,所以要收费;
    • 超过的部分 = 75-30=45 分钟;
    • 45 分钟里有几个 “半小时”?45+29=74,74÷30=2(取整数),也就是 2 个半小时;
    • 费用 = 2×1.5=3.0 元(和样例输出一致);
  4. 向上取整小技巧:加 29 再除以 30,比如 1 分钟也能算 1 个半小时(因为哪怕超 1 分钟,也要按半小时收费)。

二、C 语言实现(停车费计算 🅿️)

#include <stdio.h>
#include <string.h>  // 用于字符串拆分

// 计算停车费的函数
float calculate_parking_fee(char* start_time, char* end_time) {
    // 第一步:拆分开始时间的小时和分钟
    int start_h, start_m;
    // sscanf:从字符串里按"hh:mm"格式提取数字(比如"09:30"→start_h=9, start_m=30)
    sscanf(start_time, "%d:%d", &start_h, &start_m);
    
    // 第二步:拆分结束时间的小时和分钟
    int end_h, end_m;
    sscanf(end_time, "%d:%d", &end_h, &end_m);
    
    // 第三步:计算总停车分钟数
    int start_total = start_h * 60 + start_m;
    int end_total = end_h * 60 + end_m;
    int duration = end_total - start_total;
    
    // 第四步:按规则算费用
    if (duration <= 30) {
        return 0.0f;  // 半小时内免费
    } else {
        int extra_time = duration - 30;
        // 向上取整计算半小时个数(和Python一样,加29再整除30)
        int half_hours = (extra_time + 29) / 30;
        return half_hours * 1.5f;
    }
}

int main() {
    // 存储输入的时间(比如"09:30-10:45")
    char time_input[20];
    scanf("%s", time_input);  // 读取输入
    
    // 按短横线"-"拆分开始时间和结束时间
    char start_time[10], end_time[10];
    // strtok:把字符串按"-"拆分成两部分
    char* token = strtok(time_input, "-");
    strcpy(start_time, token);  // 第一部分是开始时间
    token = strtok(NULL, "-");
    strcpy(end_time, token);    // 第二部分是结束时间
    
    // 计算停车费
    float fee = calculate_parking_fee(start_time, end_time);
    // 输出结果,保留1位小数(%.1f表示保留1位浮点数)
    printf("%.1f\n", fee);
    
    return 0;
}
C 语言代码超详细解释(7 岁小朋友能懂)
  1. sscanf(start_time, "%d:%d", &start_h, &start_m):专门从09:30这种格式里 “抠” 出小时和分钟,比如把09start_h30start_m
  2. strtok(time_input, "-"):把输入的09:30-10:45-拆成09:3010:45
  3. 浮点数用0.0f/1.5f:C 语言里要加f表示是小数,不然会当成整数计算;
  4. printf("%.1f\n", fee):和 Python 的{0:.1f}一样,只显示 1 位小数(比如 3.0)。

三、Java 语言实现(停车费计算 🅿️)

import java.util.Scanner;  // 导入输入工具

public class ParkingFeeCalculator {
    // 计算停车费的方法
    public static float calculateParkingFee(String startTime, String endTime) {
        // 第一步:拆分开始时间的小时和分钟(比如"09:30"→9和30)
        // split(":")按冒号拆分,得到字符串数组
        String[] startParts = startTime.split(":");
        int startH = Integer.parseInt(startParts[0]);  // 转成整数小时
        int startM = Integer.parseInt(startParts[1]);  // 转成整数分钟
        
        // 第二步:拆分结束时间的小时和分钟
        String[] endParts = endTime.split(":");
        int endH = Integer.parseInt(endParts[0]);
        int endM = Integer.parseInt(endParts[1]);
        
        // 第三步:计算总停车分钟数
        int startTotal = startH * 60 + startM;
        int endTotal = endH * 60 + endM;
        int duration = endTotal - startTotal;
        
        // 第四步:按规则算费用
        if (duration <= 30) {
            return 0.0f;
        } else {
            int extraTime = duration - 30;
            // 向上取整计算半小时个数
            int halfHours = (extraTime + 29) / 30;
            return halfHours * 1.5f;
        }
    }

    public static void main(String[] args) {
        // 读取输入的时间
        Scanner scanner = new Scanner(System.in);
        String timeInput = scanner.nextLine().trim();  // 读取并去掉首尾空格
        scanner.close();
        
        // 按短横线"-"拆分开始和结束时间
        String[] timeParts = timeInput.split("-");
        String startTime = timeParts[0];  // 开始时间
        String endTime = timeParts[1];    // 结束时间
        
        // 计算停车费
        float fee = calculateParkingFee(startTime, endTime);
        // 输出结果,保留1位小数(String.format控制格式)
        System.out.println(String.format("%.1f", fee));
    }
}
Java 代码超详细解释(7 岁小朋友能懂)
  1. startTime.split(":"):和 Python 的split(':')一样,把09:30拆成["09","30"]
  2. Integer.parseInt():把字符串 "09" 转成数字 9,方便计算;
  3. String.format("%.1f", fee):和 Python/C 的格式控制一样,只显示 1 位小数;
  4. 整个逻辑和 Python、C 完全一致,只是写法稍微不同,核心都是 “算总分钟数→超 30 分钟则扣免费时间→向上取整算半小时个数→乘 1.5”。

测试样例验证(三个语言结果都一样)

输入:09:30-10:45计算过程:

  1. 开始时间:09:30 = 9×60+30=570 分钟;
  2. 结束时间:10:45=10×60+45=645 分钟;
  3. 总时长:645-570=75 分钟;
  4. 超 30 分钟的部分:75-30=45 分钟;
  5. 45+29=74 →74÷30=2 个半小时;
  6. 费用:2×1.5=3.0 元;输出:3.0(和样例一致)。

额外小测试(帮你理解规则)

输入 总时长 费用 原因
10:00-10:20 20 分钟 0.0 半小时内免费
10:00-10:31 31 分钟 1.5 超 1 分钟,按 1 个半小时收费
10:00-11:00 60 分钟 3.0 超 30 分钟,30 分钟 = 1 个半小时?不:60-30=30→30+29=59÷30=1?不对→30 分钟超期,1×1.5=1.5?哦样例是 75 分钟:75-30=45→45+29=74÷30=2→2×1.5=3.0,对!
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐