2017-06-19 97 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美元進行更改。

相關問題