You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言if-else语句求助:停车费计算代码仅通过3/5测试用例

问题分析与代码修复

你的代码存在几个关键问题,导致测试用例不通过:


1. 分钟合法性判断错误

代码里用min1<59和min2<59,但合法的分钟范围是0-59,59分钟是有效的,这个判断会把17:59这类合法时间判定为非法,直接跳过后续逻辑,导致无输出。

2. 漏掉离场时间恰好为18:00的情况

规则明确18:00及之后取车收费8000,但你的代码只判断了hour2<18和hour2>18,完全没处理hour2==18的场景,这种情况会直接跳过费用计算,无输出。

3. 条件分支结构冗余且有逻辑漏洞

多个独立的if语句可能导致逻辑混乱,比如时间相同时输出0后,后续条件仍会被判断(虽然不会产生额外输出,但结构不严谨),应该用else if形成完整的分支链,避免冗余判断。


修复后的代码

#include <stdio.h>

int main()
{
    int hour1, min1;
    int hour2, min2;
    // 读取HH:MM格式的两个时间
    scanf("%d:%d %d:%d", &hour1, &min1, &hour2, &min2);
    
    // 先判断时间合法性:小时0-23,分钟0-59
    if (hour1 >= 0 && hour1 < 24 && hour2 >=0 && hour2 <24 && min1 >=0 && min1 <=59 && min2 >=0 && min2 <=59) {
        // 判断入场时间是否晚于离场时间(含过夜情况)
        if ((hour1 > hour2) || (hour1 == hour2 && min1 > min2)) {
            printf("-1");
        } 
        // 判断入场离场时间相同
        else if (hour1 == hour2 && min1 == min2) {
            printf("0");
        } 
        // 计算停车费
        else {
            // 18:00及之后取车
            if (hour2 > 18 || (hour2 == 18 && min2 >= 0)) {
                printf("8000");
            } 
            // 18:00之前取车
            else {
                printf("5000");
            }
        }
    }
    // 可选:如果题目要求非法输入输出特定内容,可在此添加
    // else {
    //     printf("Invalid time");
    // }

    return 0;
}

额外优化说明

  • 把两次scanf合并成一次,更符合输入格式(输入是两个HH:MM时间,用空格分隔),原代码的两次scanf在输入时如果用户直接输入12:00 13:35也能工作,但合并后逻辑更清晰。
  • 调整条件分支为完整的else if链,避免冗余判断,逻辑更严谨。
  • 明确处理了18:00整的情况,完全符合题目规则。

内容的提问来源于stack exchange,提问作者NgoMinh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:35:33