gpt4 book ai didi

javascript - 更改现金功能优化 - Javascript

转载 作者:行者123 更新时间:2023-11-30 09:26:24 25 4
gpt4 key购买 nike

今天我来帮助你优化一些代码!

几周前我被要求解决一个测试问题,由于我刚开始学习 Javascript,所以想出了这个非最佳解决方案。

我想知道是否有办法(当然有)让它变得更好。

情况是这样的:

“我是一个特别善良的人,拥有无限量的 2 美元、5 美元和 10 美元钞票,我愿意为任何想要的人兑换现金,但以最有效的方式,最少的金额账单。”

由于我必须返回一个包含账单数量的对象(如果少于 2 美元则返回 null),我给出了以下解决方案:

function giveChange(change){    
var two = 0;
var five = 0;
var ten = 0;
var changeToGo = change;

while(changeToGo >= 11){
changeToGo -=10;
ten+=1;
}

while(changeToGo >=7 && changeToGo <=11){
changeToGo-=5;
five+=1;
}

while(changeToGo >=2 && changeToGo <=6 ){
if(changeToGo == 5){
changeToGo -=5;
five+=1;
}
else{
changeToGo -= 2;
two+=1;
}
}

if (change < 2){
return null;
}

return {
two: two,
five: five,
ten: ten
};
}

我认为一定有一个聪明且更优雅的解决方案(可能是 mod% 之类的),但那个怪物是我当时能够实现的,哈哈哈。

有什么想法吗?

最佳答案

编辑:删除了他最初的回答,因为它是基于对要求的误解。

好的,那么让我们反过来看,首先让我们确定我必须分发多少张 2 美元钞票才能得到一个可以被 5 美元钞票整除的数字。所以现在我只关心剩余的 < $5 来计算 $2 的钞票。

一般的想法是,如果我有一个值(value),其中 change%5 是 2,比如 12 美元或 17 美元或 22 美元,......我分发一张 2 美元的钞票,我可以将其余的除以5.

对于 14 美元、19 美元……是两张 2 美元的钞票,对于 11 美元、16 美元……我减去 6 美元,对于 13 美元、18 美元……是 8 美元

这样我就有了一张静态表,其中列出了每次 change % 5 我必须分发多少张 2 美元钞票;不需要循环,只需简单的查找。

function giveChange(change){
const two = change < 4? change>>1: [0,3,1,4,2][Math.floor(change) % 5],
rest = change - two*2;

return {
two,
five: Math.floor((rest%10)/5),
ten: Math.floor(rest/10),
};
}

Care to explain again what this does? "change>>1" and "[0,3,1,4,2][Math.floor(change) % 5];" ?

change >> 1 在这里只是 Math.floor(change/2) 的简写,主要处理特殊情况 giveChange(1)giveChange(3);它们不可互换,但对于范围 0..4(我使用它的地方),它们产生相同的结果。

let two = [0,3,1,4,2][change % 5];

//does
let two;
if(change%5 === 0) two = 0;
if(change%5 === 1) two = 3;
if(change%5 === 2) two = 1;
if(change%5 === 3) two = 4;
if(change%5 === 4) two = 2;

Math.floor(change) % 5 只是为了防止您将它与 float 一起使用,例如 giveChange(25.90)

但也许一个例子可以更好地解释它

for(let change=4; change<50; ++change){
let two = [0,3,1,4,2][change%5];
console.log("change: %i, two: %i, rest: %i", change, two, change - two*2);
}
.as-console-wrapper{top:0;max-height:100%!important}

您会看到 two 如何始终以相同的顺序始终具有相同的 5 个值,以及其余部分现在如何被 5 和/或 10 整除。

这就是这段代码的作用,它查找数组 [0,3,1,4,2],它需要为任何给定的 找零 使用多少张 2 美元钞票>,以便其余部分可以被 5 整除。

关于javascript - 更改现金功能优化 - Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48914689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com