2017-06-19 93 views
0

任何人都可以找出这个代码有什么问题吗?我在CodeWars上运行代码,并通过除了一个之外的每个测试...可悲的是,它并没有显示该输入是用于特定测试的,因此很难弄清楚。CodeWars挑战。哪个测试导致失败?

这里是挑战说明:

新的“复仇者”电影刚刚被释放!电影票房有很多人站在一条巨大的线上。他们每个人都有一张100美元,50美元或25美元的账单。 “复仇者”票价25美元。

Vasya目前是一名职员。他想把票卖给这条线上的每一个人。

Can Vasya可以向每个人出售一张门票,如果他最初没有钱,并且按照人们遵循的顺序严格销售门票,那么可以给予更改? 返回YES,如果Vasya可以向每个人出售门票并进行更改。否则返回NO。

我发现代码适用于所有测试,如果我交换检查amount50> = 1和amount25> = 1与amount25> = 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"; 
} 

回答

0

在Codewars你可以把的console.log语句(或不是JavaScript等语言等效的语句)在你的代码进行打印,当您遇到问题搞清楚了什么错误输入参数或其他变量在你的代码中或者你对输入的假设。我只是用你的代码做了这个,看到你的代码测试失败的是[25,25,25,25,50,100,50],所以应该告诉你为什么你的代码在响应时会失败获得100美元,您首先尝试返还3美元25美元作为更改,而不是首先检查50美元和25美元 - 您将收到4美元25美元,其中一项作为更改给第一个人的50美元,但因为您给其余三个25美元(而不是50美元和25美元)作为对100美元的人的更改,您不再有25美元对最后一个人的50美元进行更改。

相关问题