JavaScript实现航班乘客座位分配函数开发问题求解
原有代码核心问题
- 遗漏航班总数计算:未使用
nrOfFlights参数计算全局总座位数,仅按单航班座位数分配,多航班场景下计算完全错误 - 计算逻辑错误:直接使用除法
/计算人数会得到非整数结果,取模运算的逻辑完全不符合座位分配的扣减规则,分配时未扣除上一优先级乘客已经占用的座位 - 变量不规范:存在未声明的全局变量(如
vipPassengersNotSeated)、单词拼写错误(如regualarPassengersAssignedToEconomySeats把regular拼错) - 返回结构错误:返回结果多嵌套了一层
distributedPassengers对象,不符合要求的返回格式 - 分配顺序违规:给普通乘客分配商务舱时未扣除VIP已占用的商务舱配额,没有严格遵循给定的4级优先级规则
- 存在无用导入:引入了mocha内部工具函数,和业务逻辑完全无关
实现思路
严格按照给定的优先级逐次分配,每一步都取「当前待分配乘客数」和「当前剩余可用座位数」的最小值作为本轮分配人数,分配完成后同步扣减剩余待分配乘客数、剩余座位数,直到4个分配步骤全部走完即可,所有计算均为整数运算,不会出现小数人数的问题:
- 先计算全局初始总座位数:总商务座=单航班商务座数航班总数,总经济座=单航班经济座数航班总数
- 优先给VIP分配商务座,直到VIP分完或商务座耗尽
- 剩余未分配的VIP分配经济座,直到VIP分完或经济座耗尽
- VIP全部分配完成后,剩余商务座分配给普通乘客,直到普通乘客分完或商务座耗尽
- 最后剩余的经济座分配给普通乘客,直到普通乘客分完或经济座耗尽
修正后的完整代码
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
相关产品推荐
相关产品推荐

