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

如何修正电梯相遇问题的C语言代码?在线提交结果错误

电梯相遇问题代码修正

问题描述

楼内有3台速度为1层/秒的电梯:

  • 1台停在k层,处于维保状态(位置始终不变)
  • 第1台在x层,持续向上运行,t秒后位置为x + t
  • 第2台在y层,持续向下运行,t秒后位置为y - t

需要判断是否存在非负整数时间t,使得三台电梯处于同一楼层。若存在,输出t;否则输出-1。

输入范围:0 ≤ x,y,k ≤ 100
测试用例:

  • 输入:3 5 4 → 输出:1(t=1时,两台移动电梯均到达4层)
  • 输入:1 2 5 → 输出:-1(无满足条件的t)
  • 报错用例:输入2 6 4 → 正确输出2,但原代码输出-1

原代码问题分析

#include <stdio.h>

int main()
{
    int x, y ,k;
    scanf("%d %d %d", &x, &y, &k);
    
    while(x >= k && y <= k)
    {
        if(x-k == k-y || k-x == y-k)
        {
            if(x < k)
            {
                printf("%d\n", k-x);
            }
            else if(k <= x)
            {
                printf("%d\n", x-k);
            }
        }
        else if(x == y)
        {
            if(x > k)
            {
                printf("%d\n", x-k);
            }
            else if(x <= k)
            {
                printf("%d\n", k-x);
            }
        }
        else
        {
            printf("-1\n");
        }
        x++;
        y--;
    }
    
    return 0;
}
  1. 循环条件完全错误:while(x >= k && y <= k) 仅允许x≥k且y≤k的场景进入循环,但符合要求的场景是x≤k(向上电梯要到k层)且y≥k(向下电梯要到k层),导致如2 6 4这类合法输入直接跳过循环,无正确输出。
  2. 逻辑冗余:x-k == k-y 和 k-x == y-k 是完全等价的等式,重复判断无意义。
  3. 模拟思路低效且易出错:逐秒模拟电梯位置的方式不仅效率低,还容易遗漏边界条件,不如直接通过数学推导判断条件。

修正后的代码

#include <stdio.h>

int main() {
    int x, y, k;
    scanf("%d %d %d", &x, &y, &k);
    
    // 计算两台移动电梯到达k层所需的时间
    int t_up_to_k = k - x;
    int t_down_to_k = y - k;
    
    // 时间必须非负,且两台电梯需同时到达k层
    if (t_up_to_k >= 0 && t_down_to_k >= 0 && t_up_to_k == t_down_to_k) {
        printf("%d\n", t_up_to_k);
    } else {
        printf("-1\n");
    }
    
    return 0;
}

修正逻辑说明

三台电梯要处于同一楼层,核心条件是两台移动电梯同时到达k层:

  1. 向上电梯到达k层的时间t_up_to_k = k - x,必须≥0(电梯在x层向上走,只有x≤k时才能到达k层)
  2. 向下电梯到达k层的时间t_down_to_k = y - k,必须≥0(电梯在y层向下走,只有y≥k时才能到达k层)
  3. 两个时间必须相等,才能保证同一时刻三台电梯都在k层

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:35:28