任何人都可以找出这段代码有什么问题吗?我在CodeWars上运行代码,并通过了除一个测试之外的所有测试……可悲的是,它不显示该特定测试的输入内容,因此很难弄清楚。
以下是挑战说明:
新的《复仇者联盟》电影刚刚发行!电影票房里有很多人排成一排。他们每个人都有一张100、50或25美元的钞票。一张“复仇者”票要花费25美元。
Vasya目前正在担任文员。他想向该行中的每个人卖票。
如果Vasya最初没有钱并且严格按照人们排队的顺序出售门票,可以向每个人出售门票并进行找零吗?
如果Vasya可以将票卖给每个人并进行找零,则返回YES。否则返回NO。
我发现,如果我将金额50> = 1和金额25> = 1交换为金额25> = 3,则该代码适用于所有测试,但是我不确定为什么这样做。
function tickets(peopleInLine){
let amount25 = 0;
let amount50 = 0;
let amount100 = 0;
for(let i = 0; i < peopleInLine.length; i++){
if(peopleInLine[i] === 100){
if(amount25 >= 3){
amount25 -= 3;
amount100++;
}else if(amount25 >= 1 && amount50 >= 1){
amount25 -= 1;
amount50 -= 1;
amount100++;
}else{
return "NO";
}
}
if(peopleInLine[i] === 50){
if(amount25 >= 1){
amount25--;
amount50++;
} else {
return "NO";
}
}
if(peopleInLine[i] === 25){
amount25++;
}
}
return "YES";
}
最佳答案
在Codewars上,如果您无法确定代码出了什么问题或假设有关以下方面的问题,可以在代码中放置console.log语句(或JavaScript以外的其他语言的等效语句)以打印输入参数或其他变量。输入。我只是对您的代码执行此操作,然后发现您的代码失败的测试是[25、25、25、25、50、100、50],因此这应该向您确切说明为什么您的代码在响应时会失败得到100美元,您首先尝试返回三个25美元作为找零,而不是先检查50美元和25美元-您会收到四个25美元,其中一个作为您给第一个人的50美元找零,但是因为您给剩下的三个25美元(而不是50美元和一个25美元)作为对拥有100美元的人的更改,您不再需要25美元来更改最后一个人的50美元。
关于javascript - CodeWars挑战。哪个测试导致失败?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44622576/