CodeWars挑战。哪个测试导致失败?

时间:2017-06-19 05:02:44

标签: javascript

有人能找出这段代码有什么问题吗?我在CodeWars上运行代码并传递除了一个以外的所有测试...遗憾的是它没有显示特定测试的输入内容,因此很难弄明白。

以下是挑战说明:

新的"复仇者"电影刚刚发布!电影票房中有很多人站在一条巨大的线上。他们每人都有100,50或25美元的账单。 A"复仇者"门票费25美元。

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";
}

1 个答案:

答案 0 :(得分:1)

在Codewars上,你可以在你的代码中放入console.log语句(或用JavaScript以外的语言中的等效语句)来打印输入参数或其他变量,当你在查找代码中出现问题时遇到问题或者您对输入的假设。我刚用你的代码完成了这项工作,发现你的代码失败的测试是[25,25,25,25,50,100,50],所以这应该向你展示为什么你的代码在响应时会失败的原因得到100美元你首先尝试返回三个25美元作为更改,而不是先检查50美元和25美元 - 你得到4美元25美元,其中一个你作为改变给第一个人50美元,但是然后因为你给剩余的三个25美元(而不是50美元和一个25美元)作为100美元的人的变化,你不再需要25美元来换取最后一个人的50美元。