javascript - 如何进行这种更改方法,以便获得该给定金额的账单
问题描述
我有这个任务,我必须将给定数量的钱分成账单。我看不出我做错了什么,因此寻求一些指导。
export function change(amount) {
var bills = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000];
var result = [];
while (amount > 0) {
for (var i = 0; i < bills.length; i++) {
if (amount >= bills[i]) {
amount -= bills[i];
result.push(bills[i]);
}
}
}
return result.length;
}
解决方案
您的代码在检查较大的钞票之前先检查较小的钞票,这显然是错误的:您希望在使用 1 美元钞票之前拥有尽可能多的 1000 美元钞票。因此,您可以反转您的 bills 数组,或者只是对其进行排序以使其反转:
function change(amount) {
const bills = [1000, 500, 200, 100, 50, 20, 10, 5, 2, 1];
// alternatively, to sort it
// bills.sort((a, b) => b - a);
const result = [];
for (const bill of bills) {
const billCount = Math.floor(amount / bill);
amount = amount % bill;
result.push(...new Array(billCount).fill(bill));
}
return result;
}
推荐阅读
- python - 如何将以下数据框转换为特定格式?
- python - 弹出说元素不可交互 Selenium
- php - 如何使用正则表达式查找某些西里尔字符串
- java - 手动清除 log4j 日志文件?
- python - 有多少隐藏层?
- java - AEM slingmodels - 为什么我们需要在每个模型中使用未使用的适配器?为什么需要 Resource 和 SlingHTTPRequest?
- php - 获取作为字符串而不是数字的 URL 变量
- performance - 在 Chrome 上的 ckeditor4 中的打字性能很低,在 HTML 编辑器中输入滞后于大文本
- c# - 为什么 httpResponse.IsSuccessStatusCode 返回为 false?从 API 到 ASP.NET Core MVC?
- javascript - 如何检查我是否在 Jasmine 上返回了正确的错误