任何人都可以找出这段代码有什么问题吗?我在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/

10-16 00:10