找零计算代码优化求助:合并重复面额输出为数量+单一面额形式
找零面额计算问题修正方案
问题:计算找零面额时,输入€135期望输出合并后的面额数量(如2x €50),但实际每次使用一张就打印一次,导致重复显示相同面额。
原代码问题点:
- 计数变量
aantal50、aantal20等放在while循环内部,每次循环都会被重置为0,无法累计数量 - 每次循环结束就打印当前计数,导致每用一张纸币就输出一行,而不是累计后统一输出
修改后的代码:
let wisselgeld = parseInt(process.argv[2], 10); // 把计数变量移到循环外,避免每次重置 let aantal50 = 0; let aantal20 = 0; let aantal10 = 0; let aantal5 = 0; while (wisselgeld >= 5) { if (wisselgeld >= 50) { wisselgeld -= 50; aantal50++; } else if (wisselgeld >= 20) { // 前面已经排除>=50的情况,无需额外判断<50 wisselgeld -= 20; aantal20++; } else if (wisselgeld >= 10) { // 同理,无需判断<20 wisselgeld -= 10; aantal10++; } else if (wisselgeld >= 5) { // 无需判断<10 wisselgeld -= 5; aantal5++; } } // 循环结束后统一打印所有有数量的面额 if (aantal50 > 0) { console.log(`${aantal50}x €50`); } if (aantal20 > 0) { console.log(`${aantal20}x €20`); } if (aantal10 > 0) { console.log(`${aantal10}x €10`); } if (aantal5 > 0) { console.log(`${aantal5}x €5`); }
修改说明:
- 将计数变量移至
while循环外部,确保每次循环能持续累计对应面额的使用数量 - 移除循环内部的打印逻辑,改为循环结束后统一输出,避免重复打印相同面额
- 简化条件判断:
else if会自动承接前面条件不成立的情况,比如进入else if (wisselgeld >=20)时,必然已经满足wisselgeld <50,无需额外写判断条件
输入€135时,输出结果将符合期望:
2x €50 1x €20 1x €10 1x €5
内容的提问来源于stack exchange,提问作者Rubihno
相关产品推荐
相关产品推荐

