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

JavaScript实现航班乘客座位分配函数开发问题求解

原有代码核心问题
  • 遗漏航班总数计算:未使用nrOfFlights参数计算全局总座位数,仅按单航班座位数分配,多航班场景下计算完全错误
  • 计算逻辑错误:直接使用除法/计算人数会得到非整数结果,取模运算的逻辑完全不符合座位分配的扣减规则,分配时未扣除上一优先级乘客已经占用的座位
  • 变量不规范:存在未声明的全局变量(如vipPassengersNotSeated)、单词拼写错误(如regualarPassengersAssignedToEconomySeats把regular拼错)
  • 返回结构错误:返回结果多嵌套了一层distributedPassengers对象,不符合要求的返回格式
  • 分配顺序违规:给普通乘客分配商务舱时未扣除VIP已占用的商务舱配额,没有严格遵循给定的4级优先级规则
  • 存在无用导入:引入了mocha内部工具函数,和业务逻辑完全无关
实现思路

严格按照给定的优先级逐次分配,每一步都取「当前待分配乘客数」和「当前剩余可用座位数」的最小值作为本轮分配人数,分配完成后同步扣减剩余待分配乘客数、剩余座位数,直到4个分配步骤全部走完即可,所有计算均为整数运算,不会出现小数人数的问题:

  1. 先计算全局初始总座位数:总商务座=单航班商务座数航班总数,总经济座=单航班经济座数航班总数
  2. 优先给VIP分配商务座,直到VIP分完或商务座耗尽
  3. 剩余未分配的VIP分配经济座,直到VIP分完或经济座耗尽
  4. VIP全部分配完成后,剩余商务座分配给普通乘客,直到普通乘客分完或商务座耗尽
  5. 最后剩余的经济座分配给普通乘客,直到普通乘客分完或经济座耗尽
修正后的完整代码
function Passengers() {
    function distributeAllSeatsToAllPassengers(
        vipPassengers,
        regularPassengers,
        nrOfFlights,
        businessSeatsPerFlight,
        economySeatsPerFlight
    ) {
        // 初始化各分类分配计数
        let vipPassengersWithBusinessSeats = 0;
        let vipPassengersWithEconomySeats = 0;
        let regularPassengersWithBusinessSeats = 0;
        let regularPassengersWithEconomySeats = 0;

        // 初始化剩余资源计数
        let remainBusinessSeats = businessSeatsPerFlight * nrOfFlights;
        let remainEconomySeats = economySeatsPerFlight * nrOfFlights;
        let remainVip = vipPassengers;
        let remainRegular = regularPassengers;

        // 步骤1:VIP优先分配商务舱
        const vip2Business = Math.min(remainVip, remainBusinessSeats);
        vipPassengersWithBusinessSeats = vip2Business;
        remainVip -= vip2Business;
        remainBusinessSeats -= vip2Business;

        // 步骤2:剩余VIP分配经济舱
        const vip2Economy = Math.min(remainVip, remainEconomySeats);
        vipPassengersWithEconomySeats = vip2Economy;
        remainVip -= vip2Economy;
        remainEconomySeats -= vip2Economy;

        // 步骤3:剩余商务舱分配给普通乘客
        const regular2Business = Math.min(remainRegular, remainBusinessSeats);
        regularPassengersWithBusinessSeats = regular2Business;
        remainRegular -= regular2Business;
        remainBusinessSeats -= regular2Business;

        // 步骤4:剩余经济舱分配给普通乘客
        const regular2Economy = Math.min(remainRegular, remainEconomySeats);
        regularPassengersWithEconomySeats = regular2Economy;

        // 按要求格式返回结果
        return {
            vipPassengersWithBusinessSeats,
            vipPassengersWithEconomySeats,
            regularPassengersWithBusinessSeats,
            regularPassengersWithEconomySeats
        };
    }
    return { distributeAllSeatsToAllPassengers };
}

module.exports = Passengers();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:01:40